使用knockout.mapping我嘗試從JSON映射到ko對象。當試圖使用更高級的映射選項解決方案時,我經常得到Uncaught TypeError: g is not a function
。我試圖弄清楚什麼是問題,但我仍然感到困惑。爲什麼knockout.mapping在某些數據結構上失敗?
可以說我有很簡單的模型:
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
這似乎令人費解的是複製一些結構工程和其他不。我明白,當樹中的某處存在多層哈希時,該問題會跳轉。
這是所需的行爲還是我在這裏有什麼問題?爲什麼複製一些結構的作品,而其他不是?
謝謝!你的答案是徹底的,足夠的。我現在可能會停止用我的頭撞牆...... –