1

我的页面上有以下 HTML

<div data-personselect="" data-ng-model="selectedPersonName" data-person="currentOwnership.Person" data-id="currentOwnership.PersonId"></div>

这是使用我这样定义的人员指令:

'use strict';

define(['app'], function (app) {
    app.directive('personselect', function (personDataService) {
        var link = function ($scope, $element, $attr) {
            $scope.names = [];

            $scope.getNames = function (name) {
                return personDataService.FullNameSearch({ name: name, pageSize: 10 })
                    .then(function (sourceData) {
                        $scope.names = sourceData;
                        return sourceData;
                    }, function (error) {
                        config.logger.error(config.errorMessage("search"));
                    });
            };

            $scope.selectItem = function () {
                //$scope.$parent.$parent[$attr.person.split('.')[0]][$attr.person.split('.')[1]]
                $scope.person = findPerson($scope[$attr.ngModel]);
                $scope.id = $scope.person == undefined ? undefined : $scope.person.id;
            };

            function findPerson(itemToFind) {
                var item = _.find($scope.names, function (member) {
                    return member.name == itemToFind;
                });
                if (item == undefined) return undefined;
                return item;
            }

        };


        return {
            restrict: 'A',
            replace: true,
            scope: {
                id: '=',
                person: '=',
                defaultName: '='
            },
            templateUrl: 'app/views/templates/people/personSelect.html',
            link: link
        };
    });
});

您可以在底部看到我定义了一个隔离范围,其中包含 2 个属性,1 个用于 id,一个用于 person。这个孤立的范围正在使用 = 所以它应该双向绑定到从页面上的 html 设置的属性;在我的示例中,currentOwnership.Person 和 currentOwnership.PersonId。

现在,当我选择一个人时,正在调用 $scope.selectItem 方法并且我正在正确设置 $scope.person 和 $scope.id 属性,但是父作用域中的 currentOwnership.Person 和 currentOwnership.PersonId 属性不是改变了。

我在这里想念什么

4

1 回答 1

0

恕我直言,问题在于您的父范围,因为它不包括该currentOwnership.PersonId项目。换句话说,您正在将模板范围属性与父范围的不存在属性绑定。

我已经更新了你的小提琴,包括currentOwnership.PersonId控制器范围内的属性,看起来它可以工作。

于 2013-09-23T09:21:46.823 回答