Javascript 敲除映射插件-捕获数组值

Javascript 敲除映射插件-捕获数组值,javascript,jquery,arrays,json,knockout.js,Javascript,Jquery,Arrays,Json,Knockout.js,我有一个来自RESTAPI的JSON数组。我正在使用Knockout映射插件来处理数组,并将JSON加载到预设的表单值中(如果用户之前向表单添加了值,那么我有数据来测试Knockout数组)。表单本质上是添加或删除带有输入的div块,以便用户可以添加/删除“工作”体验 我的问题是试图破解插件如何映射数组。我试图在数组中定位一行的特定值(id),以便将其作为变量添加,以告知API删除该特定行。我可以让Knockout在html中显式输出行值,但我不知道如何以其他方式捕获它。在模板“foreach”

我有一个来自RESTAPI的JSON数组。我正在使用Knockout映射插件来处理数组,并将JSON加载到预设的表单值中(如果用户之前向表单添加了值,那么我有数据来测试Knockout数组)。表单本质上是添加或删除带有输入的div块,以便用户可以添加/删除“工作”体验

我的问题是试图破解插件如何映射数组。我试图在数组中定位一行的特定值(id),以便将其作为变量添加,以告知API删除该特定行。我可以让Knockout在html中显式输出行值,但我不知道如何以其他方式捕获它。在模板“foreach”中,我有一个引用“remove:”的按钮,这就是我试图从数组中捕获值的地方

例如,在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"}]
在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”方面有关,但我不确定映射插件在做什么,以便我可以从数组中捕获特定值……有意义吗?任何帮助都将不胜感激。

我在这方面遇到了困难,但我确实认为这是个问题,是的。Javascript中的范围有时会很麻烦。尝试在包含gone函数的范围内执行以下操作:

var self = this;
gone = function(work) {
    alert(ko.mapping.toJSON(workModel.work(self).id)); 
} 

免责声明:我现在无法亲自测试,但请尝试一下:)

我终于得到了它。它来自于组合不同的堆栈溢出帖子,也来自淘汰赛论坛。我相信其他人有比这更优雅的解决方案,但这对我来说很有用

在“Delete”(或您想要用来捕获值的任何按钮)按钮上的foreach循环中,我在数据绑定中包含了以下内容:

<a href="" class="btn" data-bind="click: function() { remove($data.id()); }">Remove</a> 

该警报返回我想要的已加载JSON的行ID。$data.id()可以更改/用于从加载的JSON返回任何映射元素。行id是一个全局id,也可以在其他地方访问。

很抱歉,尝试了它,但没有成功。如果我只做一个简单的“警报(self.workModel.work().length);”我得到了所有数组的正确值。这只是一个我似乎无法得到的值。我想你需要发布更多的代码。请发布更完整的标记和javascript。
var self = this;
gone = function(work) {
    alert(ko.mapping.toJSON(workModel.work(self).id)); 
} 
<a href="" class="btn" data-bind="click: function() { remove($data.id()); }">Remove</a> 
var self = this;
var row_id;

self.remove = function(index){
            var row_id = index;
            alert(row_id);

    }