这个绑定有什么问题?
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 被包装在其中。我不得不稍微修改一下代码,重新考虑职责,它现在可以正常工作了。
我有一个显示数据的 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 被包装在其中。我不得不稍微修改一下代码,重新考虑职责,它现在可以正常工作了。