Javascript 在淘汰中填充复杂的ViewModel
我一直想找一个这样的例子,但运气不好。到目前为止,我对KO的使用仅限于相当基本的任务。现在我需要加载一个由其他模型组成的VM。我仍然在尝试使用映射插件,但是由于某种原因没有得到它。小提琴,有一个工作版本,但它不是动态的。最后,我想从ajax调用加载json 如何使用映射加载这些文件Javascript 在淘汰中填充复杂的ViewModel,javascript,jquery,knockout.js,Javascript,Jquery,Knockout.js,我一直想找一个这样的例子,但运气不好。到目前为止,我对KO的使用仅限于相当基本的任务。现在我需要加载一个由其他模型组成的VM。我仍然在尝试使用映射插件,但是由于某种原因没有得到它。小提琴,有一个工作版本,但它不是动态的。最后,我想从ajax调用加载json 如何使用映射加载这些文件 var ContestModel = function (cm) { number: ko.obervable(cm.number); time: ko.observable(cm.time); }
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()]);
}
有什么办法让我渡过难关吗?你离得太近了。因为
ko.mapping.fromJS
将数组转换为observableArray,所以您只需将其输出直接分配给希望成为observableArray的对象,而不是从中设置数组内容。(或者,您可以提取其数组并从中设置内容。)
好的,正如注释中指出的,您的构造函数是
我假设您的目的只是将数据加载到模型中,而不是使用特定的函数。如果您想从JS数据中提取片段并将它们传递给构造函数(首先将它们转换为有效的构造函数),您可以这样做。你不需要使用
ko.mapping
,你只需要将普通的JS对象传递给构造函数,它似乎是为了做ko.mapping
所做的事情:将JS对象转换为可观察对象。Wow真的吗?不介意告诉@HapiDjus这到底能做什么?实际上没有使用任何对象构造函数函数。当您console.log(viewModel.divisions()[0].bullers()[0])
时,您将看到该对象是一个通用对象,而不是CombatantsModel
。虽然在这种情况下这可能不重要,但你可以提到它。所以基本上你可以去掉第1-20行之间的所有代码。(+属性定义为在对象文本中而非构造函数中)。因此,致命的是,这个答案没有回答问题如何加载-->这些[constructor functions]它们不是构造函数。他们胡说八道。冷静。。。我说我使用击倒直到现在是基本用途。在得到工作的答案后,我改进了自己的工作。有时,通往更好代码的道路有些坎坷。我是一个从实践中学习的人,这就是我为什么不使用它们的原因。不是攻击你,真的。
self.divisions = ko.mapping.fromJS(divisions);