Knockout.js js更新视图模型
在页面加载时,我将JSON数据转换为如下视图模型Knockout.js js更新视图模型,knockout.js,knockout-2.0,knockout-viewmodel-plugin,Knockout.js,Knockout 2.0,Knockout Viewmodel Plugin,在页面加载时,我将JSON数据转换为如下视图模型 var jsonField = '#' + '<% = hdnField.ClientID %>'; jsonModel= { availables: ko.observableArray([]) }; var valueField
var jsonField = '#' + '<% = hdnField.ClientID %>';
jsonModel= {
availables: ko.observableArray([])
};
var valueField = $(jsonField)[0].value;
var arrayGroup = $.parseJSON(valueField);
jsonModel.availables = ko.viewmodel.fromModel(arrayGroup);
var block=$('#availabilitiesBlock')[0];
ko.applyBindings(jsonModel,block);
当我尝试使用此更新的模型更新视图模型时,整个模型将变为空白
我尝试了以下方法
任何指针都会很有用,这里的答案取决于ajax调用返回的内容 我不创建updateModel,而是相信ajax调用会返回您想要的结果
ko.viewModel.updateModel(jsonModel.availables, data.d);
如果从Ajax调用返回的data.d不需要任何特殊映射(即,它只是一个不需要可观察对象的对象数组),则可以直接更新模型
//ko.viewModel.updateModel(jsonModel.availables, data.d);
jsonModel.availables(data.d);
你所遇到的潜在问题是,你一直在失去你的视图所绑定的可观察性。通过覆盖jsonModel.availables,或者忽略它并更新另一个模型(本例中为updateModel),您将丢失它
我正在写一篇关于使用AJAX时这个问题的博客文章,但是您可以在本文的第三部分看到您遇到的部分问题:
我希望这有帮助 Rohith,这里的答案取决于您通过ajax调用返回的内容 我不创建updateModel,而是相信ajax调用会返回您想要的结果
ko.viewModel.updateModel(jsonModel.availables, data.d);
如果从Ajax调用返回的data.d不需要任何特殊映射(即,它只是一个不需要可观察对象的对象数组),则可以直接更新模型
//ko.viewModel.updateModel(jsonModel.availables, data.d);
jsonModel.availables(data.d);
你所遇到的潜在问题是,你一直在失去你的视图所绑定的可观察性。通过覆盖jsonModel.availables,或者忽略它并更新另一个模型(本例中为updateModel),您将丢失它
我正在写一篇关于使用AJAX时这个问题的博客文章,但是您可以在本文的第三部分看到您遇到的部分问题:
我希望这有帮助 重点:)我最终使用了ko.viewModel.updateModel(jsonModel.availables,data.d);但这会导致我的UI挂起,因为脚本运行时间较长当您在更改可观察数组时看到运行时间较长,请检查在每个元素上运行的复杂进程(自定义绑定?)或正在为每个项重新计算的淘汰计算。@RyanRahlf这是否适用于映射插件?我发现我需要调用ajax回调中的applybindings。否则,模型不会更新。我认为映射插件破坏了订阅的元素,它无法更新它@Vyache,在ajax调用之后,您不需要再次调用applyBindings。这篇博文可能会有所帮助:spot on:)我最终使用了ko.viewModel.updateModel(jsonModel.availables,data.d);但这会导致我的UI挂起,因为脚本运行时间较长当您在更改可观察数组时看到运行时间较长,请检查在每个元素上运行的复杂进程(自定义绑定?)或正在为每个项重新计算的淘汰计算。@RyanRahlf这是否适用于映射插件?我发现我需要调用ajax回调中的applybindings。否则,模型不会更新。我认为映射插件破坏了订阅的元素,它无法更新它@Vyache,在ajax调用之后,您不需要再次调用applyBindings。这篇博文可能会有帮助: