淘汰映射;不起作用
Knockout Mapping doesn't work
我在使用Knockout Mapping时遇到问题。
我有一个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);
};
输出是"我在这里"(所以我们到达加载点),然后是空的"form"对象。
我在这里错过了什么?
这里有一个功能齐全的小提琴,可以做你想要的事情:
http://jsfiddle.net/jearles/Cm4xS/
我用一个空的observable初始化表单,然后在AJAX调用返回时加载它。通过使用with
绑定,在加载表单之前,我不会尝试显示表单。
$.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
}
});
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 监视函数从服务返回不起作用,但作用域函数起作用
- 幻灯片滚动javascript不起作用
- 淘汰映射;不起作用
- Highcharts:树映射选择状态不起作用
- 为什么这个jQuery图像映射在WordPress上不起作用
- 映射 jQuery 对象的数组不起作用
- 挖空映射不起作用
- jQuery remove 在映射集上运行时不起作用
- 图像映射器“重新绑定”不起作用
- 修复融合表映射中不起作用的搜索字段和表
- javaScript 源映射不起作用
- 已创建 GULP 源映射,但不起作用
- 图像映射中的多链接事件不起作用
- JavaScript映射不起作用
- InfoBox AddListener不起作用的映射标记
- 代码镜像键映射vim<Esc>不起作用
- 可变大小的图像映射不起作用
- JavaScript图像映射不起作用(生成的HTML起作用)
- 动态元素上的jquery.on()事件映射不起作用