hap*_*400 8 knockout-mapping-plugin knockout.js
我正在使用knockoutjs,我正在尝试从JSON数据填充ViewModel实例.根据knockoutjs文档,我可以使用此声明:
ko.mapping.fromJS(data, viewModel);
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
var pledgeVM=function(){
this.name=ko.observable();
this.Assets=ko.observableArray([]);
this.StartEdit=function(assetModel){
};
};
pledge = {"name":"Moses","Assets":[{"CityId":13,"commetns":null},{"CityId":14,"commetns":null}]};
var pledgeVMinstance=new pledgeVM();
ko.mapping.fromJS(pledge,pledgeVMinstance);
Run Code Online (Sandbox Code Playgroud)
由于某种原因,数据未填充(pledgeVMinstance.name()未定义),除非我将语句更改为:
ko.mapping.fromJS(pledge,{},pledgeVMinstance);
Run Code Online (Sandbox Code Playgroud)
可能有人可以解释我为什么会这样.
谢谢
Art*_*kov 22
它发生是因为ko.mapping.fromJS有以下签名:
ko.mapping.fromJS(data, mappingOptions, viewModel);
Run Code Online (Sandbox Code Playgroud)
其中data- 是您的json数据,mappingOptions- 是映射插件如何映射日期的说明,viewModel- 是存储映射数据的对象.
ko.mapping.fromJS(data) - 此语法将创建视图模型.
ko.mapping.fromJS(data, mappingOptions) - 这将创建具有特定选项的视图模型.
ko.mapping.fromJS(data, {}, viewModel) - 这个人在没有映射选项的情况下转换您的数据并将其放入查看模型.
阅读文档以便更好地理解:http://knockoutjs.com/documentation/plugins-mapping.html
基于阅读Knockout网站上的文档,我相信:
var viewModel = ko.mapping.fromJS(data);
Run Code Online (Sandbox Code Playgroud)
会自动为您创建一个ViewModel.这意味着您不需要自己声明ViewModel,因为映射插件会创建一个具有可观察属性的插件.
在您第一次调用它之后,您可以使用它
ko.mapping.fromJS(data, viewModel);
Run Code Online (Sandbox Code Playgroud)
要更新ViewModel数据,请在通过ajax请求加载更多数据后说明.
解决这个问题的解决方案应该是:
var pledge = {"name":"Moses","Assets":[{"CityId":13,"commetns":null},{"CityId":14,"commetns":null}]};
var pledgeVMinstance = ko.mapping.fromJS(pledge);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23796 次 |
| 最近记录: |