Javascript 在jaydata中:将变量传递到过滤器,只有全局变量起作用
我有这个功能:Javascript 在jaydata中:将变量传递到过滤器,只有全局变量起作用,javascript,variables,global,jaydata,Javascript,Variables,Global,Jaydata,我有这个功能: function db_borrarServer(idABorrar){ serversDB.servidores .filter(function(elementoEncontrado) { return elementoEncontrado.id_local == this.idABorrar; }) .forEach(function(elementoEncontrado){
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作为变量传递。如何执行此操作?在过滤器中,您应该传递一个对象,即
此
对象,如下所示:
.filter(function(){},{idABorrar: foo})
foo
可以是常量或范围内的任何变量。EntitySet filter()函数(与任何其他谓词函数一样)不是真正的闭包块,而是作为函数编写的表达式树。要解析此范围内的变量,只能依赖全局变量和表示参数上下文的this
。这遵循HTML5 Array.filter语法。要访问闭包变量,需要通过param传递它们。一些例子
在事件处理程序中,最长的语法是:
$('#myelement').click(function() {
var element = this;
context.set.filter(function(it) { return it.id_local == this.id; },
{ id: element.id});
});
但是,您也可以省略this
,以引用从JayData 1.2开始的参数,并使用字符串谓词
$('#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);
});
.filter()函数接受一个可选的第二个参数,该参数在第一个参数函数内部分配给该参数
因此,您可以这样修改代码:
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也很陌生,我也一直有点疯狂地试图让我的头脑进入这个范例。
但是我在尝试解决同一问题时遇到了您的问题,我就是这样为我解决的。如果您遇到了类似于
it.Id==this.Id的错误,在类似这样的筛选器上没有方法“apply”
var predicate=“it.Id==this.Id”;db.Table.filter(谓词,{Id:1})?