Asp.net mvc 消除复杂视图模型上的js绑定限制

Asp.net mvc 消除复杂视图模型上的js绑定限制,asp.net-mvc,knockout.js,asp.net-mvc-viewmodel,Asp.net Mvc,Knockout.js,Asp.net Mvc Viewmodel,到目前为止,我已经学习了3个月的KnockoutJS,感觉非常棒。然而,我面临着一个约束问题。 这是一个场景: 我正在使用MVC和KO MVC模型向下传递到视图,转换为敲除对象并推入viewModel变量: var data=ko.mapping.fromJS(@Html.Raw(Json.Encode(Model)); var viewModel=新的HP.ViewModels.CertificationPathViewModel(数据); 应用绑定(视图模型) 在viewModel中,我将M

到目前为止,我已经学习了3个月的KnockoutJS,感觉非常棒。然而,我面临着一个约束问题。 这是一个场景:

  • 我正在使用MVC和KO
  • MVC模型向下传递到视图,转换为敲除对象并推入viewModel变量:

    var data=ko.mapping.fromJS(@Html.Raw(Json.Encode(Model));
    var viewModel=新的HP.ViewModels.CertificationPathViewModel(数据);
    应用绑定(视图模型)

  • 在viewModel中,我将MVC模型引用为self.data:

    ViewModels.CertificationPathViewModel=(函数(数据){
    var self=ViewModels.BaseEntityViewModel.apply(此[data]);
    //其他代码
    返回{Data:self.Data,};
    }

    ViewModels.BaseEntityViewModel=(函数(数据){
    var self=这个;
    自我数据=可观察到(数据);
    //其他代码
    返回{Data:self.Data,};
    }

  • 在视图中,我将数据绑定如下:

  • 我尝试在ajax调用后更新self.data。我返回整个MVC模型对象,并尝试替换self.data,如下所示:

    self.data(updatedModel)
    
    我的期望是KO将负责更新,不需要额外的绑定。它对简单绑定(例如
    Value:Data().Something
    )非常有效,但对复杂绑定(例如
    Value:Data().BusinessUnits.SelectedGroup
    )不起作用

    具有复杂绑定的控件仍然绑定到旧模型,因此KO不知道下次提交ajax请求时要传递什么

    这是KO的限制,还是我做得不好


    谢谢ko.mapping
    插件将
    self.data
    上的每个属性更改为可观察的属性。在更新过程中,您需要重新映射更新的数据

    由于您实际上并没有发布代码,所以只发布未格式化的代码片段我帮不上大忙,但您应该首先将这一行更改为:
    self.data(updatemodel)

    ko.mapping.fromJS(updatemodel,self.data);


    堆栈溢出保护-尽可能包含完整的代码。此外,如果可以的话,制作一个复制问题的程序。

    是的,这是我经过一些研究后做的。我意识到我没有设置self.data=ko.observable()。进行更改,然后调用self.data(newData)实际上效果很好。感谢您的输入