我有这个功能:
function db_borrarServer(idABorrar){
serversDB.servidores
.filter(function(elementoEncontrado) {
return elementoEncontrado.id_local == this.idABorrar;
})
.forEach(function(elementoEncontrado){
console.log('Starting to remove ' + elementoEncontrado.nombre);
serversDB.servidores.remove(elementoEncontrado);
serversDB.saveChanges();
});
}
不起作用,但如果我用一个数字替换变量“this.idABorrar”,它确实
return elementoEncontrado.id_local == 3;
或者如果我将idABorrar声明为全局,则可以使用。
我需要将idABorrar作为变量传递。我怎么能这样做?
答案 0 :(得分:2)
EntitySet filter()函数(与任何其他谓词函数一样)不是真正的闭包块,而是作为函数编写的表达式树。要解析此范围中的变量,您只能依赖Global和代表param上下文的this
。这遵循HTML5 Array.filter语法。要访问闭包变量,您需要通过参数传递它们。一些例子
在事件处理程序中,最长的语法是:
$('#myelement').click(function() {
var element = this;
context.set.filter(function(it) { return it.id_local == this.id; },
{ id: element.id});
});
你也可以省略this
引用JayData 1.2中的params并使用字符串谓词
$('#myelement').click(function() {
var element = this;
context.set.filter("it.id_local == id", { id: element.id});
});
请注意,在字符串语法中,使用it
来表示lambda参数是必需的。
在JayData 1.3中,我们将使用一个简单的单调调用语法
$('#myelement').click(function() {
var element = this;
context.set.filter("it.id_local", "==", element.id);
});
答案 1 :(得分:1)
在过滤器中,您应该传递一个this
对象的对象,如下所示:
.filter(function(){},{idABorrar: foo})
foo
可以是const或范围内的任何变量。
答案 2 :(得分:0)
.filter()函数采用可选的第二个参数,该参数分配给第一个参数函数内的 this 。
所以你可以这样修改你的代码:
function db_borrarServer(idABorrar){
serversDB.servidores
.filter(function(elementoEncontrado) {
return elementoEncontrado.id_local == this;
}, idABorrar)
.forEach(function(elementoEncontrado){
console.log('Starting to remove ' + elementoEncontrado.nombre);
serversDB.servidores.remove(elementoEncontrado);
serversDB.saveChanges();
});
}
让我知道你是怎么回事 - 我也是jaydata的新手,我也有点疯狂试图让我的头脑进入这个范例。 但是我遇到了你试图解决同样问题的问题,这就是我为我解决的问题。