Knockout.js 需要使用敲除绑定从模型类调用ViewModal方法

Knockout.js 需要使用敲除绑定从模型类调用ViewModal方法,knockout.js,Knockout.js,每次用户单击单个项目时,我都需要一次性保存整个数据。为此,我对每个属性使用了subscribe()。 但在我的例子中,我需要从模型函数内部调用parentApplySetting()方法。我不认为每次填充数组时都传递列表是个好主意。因为我有大量的数据。你能告诉我,有没有最好的办法 函数UserViewModel(数据){ var self=这个; self.userID=data.userID; self.userroles=ko.observearray(); self.userroles.

每次用户单击单个项目时,我都需要一次性保存整个数据。为此,我对每个属性使用了subscribe()。 但在我的例子中,我需要从模型函数内部调用parentApplySetting()方法。我不认为每次填充数组时都传递列表是个好主意。因为我有大量的数据。你能告诉我,有没有最好的办法

函数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

太棒了!!!。解释得很好,我设法理解并实施了它。非常有用。谢谢:)还请告诉我,如果我需要将单个项目发送到服务器,如何使用相同的方法发送?