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 とthisparam コンテキストを表す のみに依存できます。これは、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は、ラムダ引数を示すために を使用することが必須であることに注意してください。

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

fooconst またはスコープ内の任意の変数にすることができます。

于 2013-03-24T17:19:29.690 に答える
0

.filter() 関数は、最初のパラメーター関数の内部でこれに割り当てられるオプションの 2 番目のパラメーターを取ります。

したがって、次のようにコードを変更できます。

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 に答える