Knockout.js 需要使用敲除绑定从模型类调用ViewModal方法
每次用户单击单个项目时,我都需要一次性保存整个数据。为此,我对每个属性使用了subscribe()。 但在我的例子中,我需要从模型函数内部调用parentApplySetting()方法。我不认为每次填充数组时都传递列表是个好主意。因为我有大量的数据。你能告诉我,有没有最好的办法Knockout.js 需要使用敲除绑定从模型类调用ViewModal方法,knockout.js,Knockout.js,每次用户单击单个项目时,我都需要一次性保存整个数据。为此,我对每个属性使用了subscribe()。 但在我的例子中,我需要从模型函数内部调用parentApplySetting()方法。我不认为每次填充数组时都传递列表是个好主意。因为我有大量的数据。你能告诉我,有没有最好的办法 函数UserViewModel(数据){ var self=这个; self.userID=data.userID; self.userroles=ko.observearray(); self.userroles.
函数UserViewModel(数据){
var self=这个;
self.userID=data.userID;
self.userroles=ko.observearray();
self.userroles.removeAll();
data.forEach(功能(项){
self.userroles.push(新的UserRoleModal(item));
});
自动应用程序设置(数据){
//将列表发送到服务器的Ajax POST方法
}
}
函数UserRoleModal(项){
var self=这个;
self.userID=ko.observable(item.Id);
self.CanEdit=ko.可观察(项目.CanEdit);
自身烛光=可观察到的ko(项目烛光);
self.canView=ko.可观察(item.canView);
self.FullControl=可观察到(项目FullControl);
self.canView.subscribe(函数(newValue){
//需要调用ApplySetting方法和pass List
});
}
卡内特
烛台
坎维尤
完全控制
这是ko.pureComputed
的理想用例。敲除的计算值管理它们自己的依赖项跟踪。即:通过使用可观察值,您将自动订阅任何更改:
function UserRoleModal(item) {
/* ... */
self.viewOptions = ko.pureComputed(function() {
return {
canEdit: self.CanEdit(),
canDelete: self.CanDelete(),
canView: self.canView()
fullControl: self.FullControl()
};
});
};
此属性将是订阅中UserRoleModal
状态的普通对象表示。这意味着您可以收集父视图模型中的所有角色并订阅后期更新:
function UserViewModel(data) {
/* ... */
var userRoleSettings = ko.pureComputed(function() {
return self.userroles().map(function(role) {
return role.viewOptions();
});
}).extend({ deferred: true });
userRoleSettings.subscribe(function applySetting(latestSettings) {
//Ajax POST method to send List to server
});
}
总结:
- 每当
权限属性更改时,RoleModal
都会更新viewOptions
- 每当
属性更改时,viewOptions
就会更新userRoleSettings
- 每当
更新时,都会使用最新值调用userRoleSettings
applySettings