在页面加载我转换JSON数据,查看模型这样Knockout.js更新视图模型
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的服务器功能来更新这个视图模型。
在塔AJAX的成功再打我已经写了像
var updatedModel = {
availables: ko.observableArray([])
};
updatedModel.availables = ko.viewmodel.fromModel(data.d);
当我尝试更新与此更新的模型我的整个模型成为视图模型空白
我尝试以下方法
将data.d推入oldModel.availables observable。当我推送数据时,aray对象不会被转换为可观察对象,而是将这些项目添加到availables数组中。而在最初(页面加载时),对象转换没有问题。
试图直接更新的ViewModels并且在这种情况下,整个模型变为空白
ko.viewmodel.updateFromModel(oldModel,updatedModel);更新的模型
正如我所说的,当我推阵列对象直接(data.d)的
旧的剪断模型
剪断,在ajax之前的第一种情况下,observables不会自动创建。
为什么当逻辑相同时会发生这种情况?我正在使用http://coderenaissance.github.io/knockout.viewmodel/自动映射对象。
任何指针将会很有帮助
现货:)我结束了使用ko.viewModel.updateModel(jsonModel.availables,data.d);但是由于脚本运行时间较长,导致我的用户界面挂起 –
当您在更改可观察数组时看到很长的运行时间,请检查在每个元素上运行的复杂进程(自定义绑定?),还是正在重新计算的敲除计算结果计算每个项目。 –
@RyanRahlf这将工作与地图插件?我发现我需要调用我的ajax回调函数中的applybindings。否则,该模型不会更新。我认为地图插件打破了订阅的元素,并且无法更新它。 http://stackoverflow.com/questions/21558075/how-do-i-update-my-model-using-ajax-and-mapping-plugin/21568045#21568045 – Vyache