Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在jaydata中:将变量传递到过滤器,只有全局变量起作用_Javascript_Variables_Global_Jaydata - Fatal编程技术网

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})?