Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在淘汰中填充复杂的ViewModel_Javascript_Jquery_Knockout.js - Fatal编程技术网

Javascript 在淘汰中填充复杂的ViewModel

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); }

我一直想找一个这样的例子,但运气不好。到目前为止,我对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()]);
}


有什么办法让我渡过难关吗?

你离得太近了。因为
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);