我有以下淘汰赛的viewModel:
var viewModel = { businessName:“”, .... }
我还尝试识别这样的字段:businessName:ko.observable(“”)
然后,我有一个load方法,请求带有新填充数据的JSon
这就是我尝试应用新数据的方式:
$.ajax({
//
url: "@Html.Raw(@Url.Action("Load"))",
type: "post",
data: ko.toJSON(this),
contentType: "application/json",
success: function (result) {
//OPTION 1:
viewModel.businessName = result.vm.BusinessName;
//OPTION 2:
var viewModel2 = ko.mapping.fromJS(result.vm);
console.log(viewModel2.businessName);
}
});//ajax
结果: 如果我使用Option1,我会获得新数据,但它不会在页面上更新。 如果我使用Option2,它会写“未定义”
请告知我如何更新页面上的新数据? 我检查了类似的主题,但没有答案可以帮助
PS
似乎我解决了选项1.但仍然不明白为什么选项2不起作用
答案 0 :(得分:0)
ko.observable
是一个函数,而不是属性。所以你得到它的价值:
var whatsTheValue = myVM.MyObservable();
你设置如下:
myVM.MyObservable(newValue);
这一切都在docs。
但请注意,在HTML中使用data-bind
语法时,您无需使用括号显式展开您的observable,因为KO足够聪明,可以自动执行:
<span data-bind="text: MyObservable"></span>
答案 1 :(得分:0)
您 在ViewModel中使用ko.observable
并相应地访问/写入。
var myViewModel = {
businessName = ko.observable('')
};
...
$.ajax({
...
success: function(result) {
myViewModel.businessName(result.vm.BusinessName);
},
...
});
否则您的观点将无法改变businessName
。在实现ko.observable中,除了实际存储新值之外,还会向您的视图广播一些事件,让它知道存储的值已更改。