Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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模型映射到具有可观察对象的淘汰模型_Javascript_Knockout.js - Fatal编程技术网

将自定义JavaScript模型映射到具有可观察对象的淘汰模型

将自定义JavaScript模型映射到具有可观察对象的淘汰模型,javascript,knockout.js,Javascript,Knockout.js,我从服务器收到一个模型,它是一个(导航)菜单。 因此,它有1个根项和一个menuitems数组。根项目也有一个标题。 menuitems数组是一个包含标题和链接项(具有控制器、动作、css等属性的对象)的项目数组 我的knockout viewmodel中有相同的模型,但是所有的数组和属性都是可观察的数组/字符串/整数 现在当我这么做的时候 vm.menuitems(menuitemsfromserver)我有一个带有可观察数组的菜单,但树中所有“下方”或“下方”的项目都是“普通”对象,不再可观

我从服务器收到一个模型,它是一个(导航)菜单。 因此,它有1个根项和一个menuitems数组。根项目也有一个标题。 menuitems数组是一个包含标题和链接项(具有控制器、动作、css等属性的对象)的项目数组

我的knockout viewmodel中有相同的模型,但是所有的数组和属性都是可观察的数组/字符串/整数

现在当我这么做的时候

vm.menuitems(menuitemsfromserver)
我有一个带有可观察数组的菜单,但树中所有“下方”或“下方”的项目都是“普通”对象,不再可观察

我见过
map
方法,但我对它没有任何意义。
模型是相同的,唯一的区别是一个由可观察的(-array)组成,另一个由普通javascript对象组成。

有一个专门针对这种情况的插件:

根据其文件:

// Every time data is received from the server:
ko.mapping.fromJS(data, viewModel);
对象的所有属性都转换为可观察的属性。如果更新会改变值,它会更新可观察值

数组被转换为可观察数组。如果更新将更改项目的数量,它将执行适当的添加/删除操作。它还将尝试保持与原始JavaScript数组相同的顺序

在您的情况下,代码如下所示:

ko.mapping.fromJS(menuitemsfromserver, vm.menuitems)
它将迭代来自服务器的所有属性和menuitemsfromserver的所有数组,并将它们转换为可观察对象


插件最近没有得到积极维护,如图所示:,但出于这个目的,它仍然是一个有用的代码。

谢谢。我会试试的。好吧,这部分有效。发生的情况是,它会覆盖原始对象,因此所有计算的属性都会被覆盖。解决其他人所做的问题的一种方法是,首先读取整个数据模型,然后将所有计算出的属性添加到viewmodel中。我觉得这不是一种干净的做事方式。我不确定我是否看到了整个画面。我通常使用映射的方式是将原始服务器数据映射到可观察的模型,所有计算变量都不是模型的一部分,但它们直接属于viewmodel。如果问题中包含更多的代码示例,也许我可以提供一些澄清?