Knockout JS:从 viewmodel 可观察数组创建 Json

Posted

技术标签:

【中文标题】Knockout JS:从 viewmodel 可观察数组创建 Json【英文标题】:Knockout JS: Creating Json from viewmodel observable array 【发布时间】:2018-09-08 10:24:53 【问题描述】:

我有一个动态创建列的 html 表。有添加行按钮可将行添加到表中,删除行按钮可删除行。 最后有一个保存按钮,我想从输入的表中获取所有数据并将其以 json 格式发送到我的 mvc 控制器。

表设置一切正常。我遇到的唯一问题是从可观察数组创建 json。 下面是我的小提琴:

https://jsfiddle.net/4djn2zee/1/

如果您单击添加一行或多行并在这两行中输入数据。如果您按下保存按钮,则会有一个 observable 为:

self.valuesData()

如果你在控制台中看到,现在这个值是:

(2) [ValuesData, ValuesData]

进一步扩展:

(2) [ValuesData, ValuesData]
0:ValuesData ID: "1", Co1: "2", Col2: "3", Col3: "4", Col4: "5", …
1:ValuesData ID: ƒ, Co1: ƒ, Col2: ƒ, Col3: ƒ, Col4: ƒ, …
length:2
__proto__:Array(0)

因为我添加了 2 行,所以我可以看到一个 2 的数组。

现在,如果您在上面看到,我可以在第一行 id、col1、col2 等中看到我的数据。 我遇到的问题是如何从 observable 中获取数据并构造我的 json。

我希望我的 json 如下所示:


"ID": "1",
"Co1": "2",
"Col2": "3",
"Col3": "4",
"Col4": "5",
"Col5": "6",
"Comment": "7"
,

"ID": "8",
"Co1": "9",
"Col2": "10",
"Col3": "11",
"Col4": "12",
"Col5": "13",
"Comment": "14"

更新:

我试过如下:

    var dataToSave = $.map(self.valuesData(), function(item) 
    var jsonToSend = ;



    return jsonToSend;
  );

再次如第一行所述,我可以看到数据,但不确定如何从第二行和后续行获取数据。

这是我更新的小提琴:

https://jsfiddle.net/4djn2zee/3/

【问题讨论】:

您尝试的解决方案在哪里? @AluanHaddad 我已经用我对循环列表的了解更新了我的问题。 【参考方案1】:

试试这个:

var dataToSave = ko.toJSON(self.valuesData);

【讨论】:

以上是关于Knockout JS:从 viewmodel 可观察数组创建 Json的主要内容,如果未能解决你的问题,请参考以下文章

Knockout.js如何与组件共享viewmodel observable以进行双向绑定

Knockout js绑定可空对象的属性

如何使用 Knockout.js 将多个 View 绑定到单个 ViewModel

Knockout.js:页面或页面的一部分上的多个 ViewModel 绑定

仅从 Knockout ViewModel 复制可写项目

将 MVC 模型转换为 Knockout JS ViewModel