2013-03-24 38 views
2

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

回答

1

在过滤器应该能够传送一个对象,该对象是this对象,像这样:

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

foo可以是常量或者是在范围上的任何变量。

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引用PARAMS作为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); 
}); 
+0

如果你有一个像'it.Id == this.Id这样的错误,没有方法'apply',就像这样'var predicate =“it.Id == this.Id”; db.Table.filter(谓词,{Id:1})'? – DontVoteMeDown 2013-09-03 21:34:58

0

的.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也是一样,我也一直会有点疯狂试图让我的头进入这个范例。 但我碰到你的问题,试图解决同样的问题,这就是我为我解决这个问题。