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