这个绑定有什么问题?

What is wrong in this binding?

我有一个显示数据的 angular ui 网格,每一行都有一个 "Edit" 和 "Delete" 按钮。当用户单击 "Edit" 时,将显示模态 window 并填充字段,用户可以编辑数据。这是我的用户场景。当用户单击 "Edit" 按钮时,我传递 id 值,当 angular 创建模态时 window 我从服务器查询数据。

如您在 html 中所见,控制器未绑定,因为它由另一个控制器管理。如果它会被绑定在这里那么它会被调用两次。

字段已正确填充,当我更改其中的内容并想保存它时,breeze 说实体中没有任何更改,保存方法中的日志返回实体的原始值。

我假设数据绑定有问题,但我不知道是什么。

根据 pluralsight 视频和 breeze 的文档,breeze 跟踪了实体中的变化。

我做错了什么? 表格:

<form class="form-horizontal" name="editModuleModalForm">

    <legend>Edit module</legend>

    <div class="control-group">
        <label class="control-label">Module name</label>
        <div class="controls">
            <input type="text"
                   placeholder="Module name here..."
                   data-ng-model="vm.sysmodule.name"
                   data-z-validate />
        </div>
    </div>

    <div class="control-group">
        <label class="control-label">Module Sort number</label>
        <div class="controls">
            <input type="text"
                   placeholder="Module sort number"
                   data-ng-model="vm.sysmodule.sortNo"
                   data-z-validate />
        </div>
    </div>

    <div class="control-group">
        <label class="control-label">Route</label>
        <div class="controls">
            <input type="text"
                   placeholder="Module route comes here..."
                   data-ng-model="vm.sysmodule.route"
                   value="vm.sysmodule.route"
                   data-z-validate />
        </div>
    </div>

    <div class="control-group">
        <button type="submit" class="btn btn-success" data-ng-click="vm.save()">Save</button>
        <button type="submit" class="btn btn-danger" data-ng-click="vm.cancel()">Cancel</button>
    </div>


</form>

Angular 表单控制器

(function () {
    'use strict';

    var controllerId = 'editModuleController';

    angular
        .module('dilibApp')
        .controller(controllerId, ['$scope', '$modalInstance', 'selectedModuleId', 'common', 'datacontext', editModuleController]);

    function editModuleController($scope, $modalInstance, selectedModuleId, common, datacontext) {

        /* jshint validthis:true */
        var vm = this;
        vm.title = 'editModule';
        vm.sysmodule = undefined;
        vm.cancel = cancel;
        vm.save = save;

        activate();

        function activate() {
            onDestroy();
            common.activateController([getModulePropertiesToBeEdited()], controllerId);
        }

        function getModulePropertiesToBeEdited() {
            return datacontext.sysmodule.getById(selectedModuleId)
                .then(function (result) {
                    vm.sysmodule = result[0];
                });
        }

        function onDestroy() {
            $scope.$on('$destroy', function () {
                datacontext.cancel();
            });
        }

        function cancel() {
            $modalInstance.dismiss('cancel');
        }

        function save() {
            console.log(vm.sysmodule);
            if (datacontext.hasChanges) {
                datacontext.saveChanges();
                console.log('Changes are saved!');
            } else {
                console.log('There are no changes to be saved!');
            }

            $modalInstance.close();
        }
    }
})();

绑定没有问题。问题的根源是数据上下文没有 hasChanges 方法,因为 breeze 的 entityManager 被包装在其中。我不得不稍微修改一下代码,重新考虑职责,它现在可以正常工作了。