我有一个来自 REST API 的 JSON 数组。我正在使用 Knockout 映射插件来处理数组并将 JSON 加载到预设的表单值中(如果用户之前已将值添加到表单中 - 我有数据来测试 Knockout 数组)。该表单本质上是添加或删除带有输入的 div 块,因此用户可以添加/删除“工作”体验。
我的麻烦是试图破译插件如何映射数组。我试图在数组中找到一行的特定值(id),以便我可以将其添加为变量来告诉 API 删除该特定行。我可以让 Knockout 显式输出 html 中的行值,但我不知道如何捕获它。在模板“foreach”中,我有一个引用“删除:”的按钮,这就是我试图从数组中捕获值的地方。
例如在 HTML 中:
这输出两行“工作”对象没问题:
<span data-bind="text: ko.mapping.toJSON(workModel.work())"></span>
[{"id":"1","schoolID":"2","place":"","position":"Science Teacher","description":"I worked at ASD for 1 year as a Science teacher.","start":"2011","end":"2012","profileID":"91"},{"id":"2","schoolID":"1","place":"American School of Taiwan","position":"Science Guy","description":"I was just another science guy","start":"2008","end":"2011","profileID":"91"}]
这将输出数组中第一行和项目的 id:
<span data-bind="text: ko.mapping.toJSON(workModel.work()[0].id)"></span>
"1"
但是在 javascript 中,如果您单击由 foreach 模板生成的删除按钮...
gone = function(work) {
alert(ko.mapping.toJSON(workModel.work(this).id));
}
在 Firebug 中给了我这个错误,然后 UI 重新加载并删除了我刚刚单击的模板块。
Unable to parse bindings. Message: TypeError: workModel.work()[0] is undefined; Bindings value: text: ko.mapping.toJSON(workModel.work()[0].id)
即使,如果我用显式语句替换上述警报:
gone = function(work) {
alert(ko.mapping.toJSON(workModel.work()[0].id));
}
我再次得到正确的“1”值。我知道它与代码的“this”方面有关,但我不确定映射插件在做什么,以便我可以从数组中捕获特定值......有意义吗?任何帮助将不胜感激。