3

我有这个功能:

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

4

3 回答 3

2

EntitySet filter() 函数(与任何其他谓词函数一样)不是真正的闭包块,而是编写为函数的表达式树。要解析此范围内的变量,您只能依赖 Global 和thiswhich 代表参数上下文。这遵循 HTML5 Array.filter 语法。要访问闭包变量,您需要通过参数传递它们。一些例子

在事件处理程序中,最长的语法是:

$('#myelement').click(function() {
   var element = this;
   context.set.filter(function(it) { return it.id_local == this.id; }, 
                      { id: element.id});
});

但是,您也可以省略从thisJayData 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);
});
于 2013-03-26T08:01:07.280 回答
1

在过滤器中,您应该传递一个作为对象的this对象,如下所示:

.filter(function(){},{idABorrar: foo})

foo可以是 const 或范围内的任何变量。

于 2013-03-24T17:19:29.690 回答
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 也很陌生,而且我也有点疯狂地试图让我的头脑进入这个范式。但是我遇到了您试图解决相同问题的问题,这就是我为我解决的方法。

于 2014-06-11T07:15:21.320 回答