Angular Binding Getter/Setter

HTML

<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap.css">
<script src="http://code.angularjs.org/1.0.1/angular-1.0.1.js"></script>
<div ng-app="myApp">
<body>
<form name="form">    
    <input type="text" ng-model="$ngModelValue" ng-model-getter="getValue()" ng-model-setter="setValue($value)"/> {{myDerivedValue}}
    
    <div>
        <input type="text" ng-model="myValue" />
    <div>
</form>
</body>
</div>

JavaScript

var myApp = angular.module('myApp', []);

myApp.directive(
    {
        'ngModelGetter': function () {
            return {
                require: "ngModel",
                controller: ctrl,
                link:  function(scope, element, attrs, ngModelCtrl)
                {
                    var getExpression = attrs.ngModelGetter;
            
                    function updateViewValue(newValue, oldValue)
                    {
                        if (newValue != ngModelCtrl.$viewValue)
                        {
                            ngModelCtrl.$setViewValue(newValue);
                            ngModelCtrl.$render();
                        }
                        
                        var updateExpression = attrs.ngModel + "=" + getExpression;
                        scope.$eval(updateExpression);
                    }
                                        
                    updateViewValue();    
                    
                    scope.$watch(getExpression, updateViewValue);
                }
            };
        },
        
        'ngModelSetter': function () {
            return {
                require: "ngModel",
                controller: ctrl,
                link:  function(scope, element, attrs, ngModelCtrl)
                {
                    var setExpression = attrs.ngModelSetter;
                                
                    function updateModelValue(e)
                    {
                        scope.$value = ngModelCtrl.$viewValue;
                        scope.$eval(setExpression);
                        delete scope.$value;
                    }
                                        
                    scope.$watch(attrs.ngModel, updateModelValue);
                }
            };
        }
    });

function ctrl($scope) {
    $scope.getValue = function ()
    {
        return $scope.myValue;
    }
    
    $scope.setValue = function (val)
    {
        $scope.myValue = val;
       ...