在jaydata中:将变量传递给过滤器,只传递全局工作

时间:2013-03-24 11:57:50

标签: javascript variables global jaydata

我有这个功能:

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作为变量传递。我怎么能这样做?

3 个答案:

答案 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的新手,我也有点疯狂试图让我的头脑进入这个范例。 但是我遇到了你试图解决同样问题的问题,这就是我为我解决的问题。