0

我有以下淘汰赛的 viewModel :

var viewModel={ 业务名称:“”,.... }

我还尝试识别这样的字段:businessName: ko.observable("")

然后,我有一个加载方法,它请求一个带有新填充数据的 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,它会写“未定义”

请告知如何更新页面上的新数据?我检查了类似的主题,但没有帮助的答案

附言

看来我解决了选项 1。但仍然不明白为什么选项 2 不起作用

4

2 回答 2

0

ko.observable是一个函数,而不是一个属性。所以你得到它的价值是这样的:

var whatsTheValue = myVM.MyObservable();

你这样设置:

myVM.MyObservable(newValue);

这一切都在文档中。

但是请注意,data-bind在您的 HTML 中使用语法时,您不需要使用括号显式地解开您的 observable,因为 KO 足够聪明,可以自动执行此操作:

<span data-bind="text: MyObservable"></span> 
于 2013-08-27T12:54:02.843 回答
0

必须ko.observable在 ViewModel中使用并相应地访问/写入它。

var myViewModel = {
    businessName = ko.observable('')
};

...

$.ajax({
    ...
    success: function(result) {
        myViewModel.businessName(result.vm.BusinessName);
    },
    ...
});

否则你的观点不会有任何你改变的线索businessName。在实现 ko.observable 中,除了实际存储新值之外,还会将一些事件广播到您的视图,让它知道存储的值已更改。

于 2013-08-27T12:57:23.607 回答