[英]Knockout Mapping doesn't work
我在使用淘汰赛映射时遇到了麻烦。
我有一个FormBuilderViewModel,其中包含许多功能,包括加载和保存数据。 第一行(在self = this之后)如下:
this.form = ko.mapping.fromJS({blueprint_identifier: undefined, name: undefined, description: undefined, pages : []})
我用3个元变量和1个数组初始化“ this.form”。
然后,我加载数据(也在FormBuilderViewModel中):
ko.mapping.fromJSON(allData, {}, self.form);
变量allData
来自AJAX请求,并包含以下内容: {"blueprint_identifier":1347437911,"name":"test","description":"test","pages":[]}
问题是:加载的JSON永远不会出现在我的页面上。 加载数据后console.log(this.form)
的输出为空。 这是整个脚本(除了函数等):
var FormBuilderViewModel = function(data){
var self = this;
this.form = ko.mapping.fromJS({
blueprint_identifier: undefined,
name: undefined,
description: undefined,
pages : []
})
$.getJSON("x", function(allData) {
if(){
console.log("I'm here");
ko.mapping.fromJSON(allData, {}, self.form);
}else{
// not relevant
}
});
console.log(self.form);
};
输出是“我在这里”(因此我们到达加载点),然后是空的“表单”对象。
我在这里想念什么?
$.getJSON
函数async
因此当您调用console.log(self.form)
映射未完成时。 要在控制台输出中查看您的对象,请将日志操作移至成功函数:
$.getJSON("x", function(allData) {
if(){
console.log("I'm here");
ko.mapping.fromJSON(allData, {}, self.form);
console.log(self.form);
}else{
// not relevant
}
});
尝试使用ko.mapping.fromJS
而不是ko.mapping.fromJSON
因为allData
不是如fromJSON
预期的字符串:
$.getJSON("x", function(allData) {
if(){
console.log("I'm here");
ko.mapping.fromJS(allData, {}, self.form);
console.log(self.form);
}else{
// not relevant
}
});
这是一个起作用的小提琴,它可以满足您的需求:
http://jsfiddle.net/jearles/Cm4xS/
我用一个可观察的空值初始化表单,然后在AJAX调用返回时加载它。 通过使用with
绑定,在加载表单之前,我不会尝试显示该表单。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.