一直试图找到一个例子,但没有运气。到目前为止,我对KO的使用仅限于相当基本的任务。现在我需要加载一个由其他模型组成的VM。仍然试图使用映射插件包围我,但由于某种原因没有得到它。小提琴,有一个工作版本,但它不是动态的。最终,我想从ajax调用中加载json。
如何使用映射加载它们?
var ContestModel = function (cm) {
number: ko.obervable(cm.number);
time: ko.observable(cm.time);
}
var CombatantModel = function (c) {
name: ko.observable(c.name);
weapon: ko.observable(c.weapon);
kills: new ContestModel(c.kills);
takedowns: new ContestModel(c.takedowns);
throws: new ContestModel(c.throws);
}
var DivisionModel = function (d) {
name: ko.observable(d.name);
combatants: ko.observableArray([new CombatantModel()]);
}
http://jsfiddle.net/5vy52umm/2/
让我超越驼峰的任何想法?
答案 0 :(得分:-2)
你太近了。因为ko.mapping.fromJS
将数组转换为observableArray,所以只需将其输出直接分配给您想要的observableArray,而不是从中设置数组内容。 (或者,您可以提取其数组并从中设置内容。)
self.divisions = ko.mapping.fromJS(divisions);
http://jsfiddle.net/5vy52umm/3/
好的,正如评论中所指出的,你的构造函数是
我假设你的意图只是将你的数据加载到你的模型中,而不是使用特定的功能。如果你想从JS数据中提取它们并将它们传递给你的构造函数(首先将它们变成有效的构造函数),你可以这样做。你不会使用ko.mapping
,你只需要将普通的JS对象传递给构造函数,它看起来就像ko.mapping
那样做:将JS对象转换为可观察对象。