这个绑定有什么问题?

时间:2015-02-18 15:14:20

标签: angularjs breeze

我有一个角度ui网格,其中显示数据,并且在每一行中都有一个"编辑"和"删除"按钮。当用户点击"编辑"然后显示模态窗口并填充字段,用户可以编辑数据。这是我的用户场景。当用户点击"编辑"按钮我传递id值,当angular创建模态窗口时,我从服务器查询数据。

正如你在html中看到的那样,控制器没有绑定,因为它是由另一个控制器管理的。如果它绑定在这里,那么它将被调用两次。

字段填充正确,当我更改其中的某些内容并且我想保存它时,breeze表示实体中没有任何更改,而save方法中的日志会返回实体的原始值。

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

根据复数视频和微风的文档,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>

表单的角度控制器

(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();
        }
    }
})();

1 个答案:

答案 0 :(得分:0)

绑定没有问题。如果问题是datacontext没有hasChanges方法的根,因为breeze的entityManager被包装在其中。我不得不重新编写代码,重新考虑责任,现在正在运作。