【发布时间】:2016-05-04 16:13:44
【问题描述】:
使用 knockout.mapping 我尝试从 JSON 映射到 ko-object。在尝试使用带有映射选项的更高级解决方案时,我经常得到Uncaught TypeError: g is not a function。我试图找出问题所在,但我仍然感到困惑。
假设我有一个非常简单的模型:
var data1 = { // works
a: "a",
b: [
{ b1: "v1" },
{ b2: "v2" }
]
};
现在使用这个模型可以像这样正常工作:
function viewModel ( data ) {
var self = this;
var a = ko.mapping.fromJS( data, { observe: "a"} );
return a;
}
var vm1 = viewModel( data1 ); // works
我的模型中有两个属性(a 和 b),但我只需要 a 即可观察到,而 b 应该只是复制到视图模型中。
遗憾的是,如果数据结构变得更深,它就不能很好地工作:
var data1 = { // works
a: "a",
b: [
{ b1: "v1" },
{ b2: "v2" }
]
};
var data2 = { // Uncaught TypeError: g is not a function
a: "a",
b: [
{ b1: { name: "v1" } },
{ b2: { name: "v2" } }
]
};
var data3 = { // Uncaught TypeError: g is not a function
a: "a",
b1: { name: "v1" },
b2: { name: "v2" }
};
var data4 = { // works
a: "a",
b1: "v1",
b2: "v2"
};
var data5 = { // works
a: "a",
b1: ["1::v1", "2::v1"],
b2: ["1::v2", "2::v2"]
};
function viewModel ( data ) {
var self = this;
var a = ko.mapping.fromJS( data, { observe: "a"} );
return a;
}
var vm1 = viewModel( data1 ); // works
var vm2 = viewModel( data2 ); // Uncaught TypeError: g is not a function
var vm3 = viewModel( data3 ); // Uncaught TypeError: g is not a function
var vm4 = viewModel( data4 ); // works
var vm5 = viewModel( data5 ); // works
复制某些结构有效而其他无效似乎令人费解。我明白,当树中某处存在多级哈希时,这个问题就会出现。
这是期望的行为还是我这里有什么问题?为什么复制某些结构有效而其他无效?
【问题讨论】:
标签: javascript knockout.js knockout-mapping-plugin