1

KOjs の foreach で反復処理を行う方法がわかりません。私が必要とするのは、このような配列の内容をグループ化することです

Var x = [{name: Joel, sex: male}, {name: Eric, sex: male},{name:Elliot, sex:female}, {name:Mary, sex:female}]

そのため、結果のデータ バインド foreach はその人の性別を表示しますが、ラベルとしては 1 回だけです。このようなもの

-male
Joel
Eric
-female
Elliot
Mary

通常の for ループでは、最後のエントリの性別を保持する変数を作成するのと同じくらい簡単で、変更された場合は新しいものを出力します。何かのようなもの

If(this.sex != cachedSex){
 cachedSex=this.sex;
console.log(cachedSex);
}

しかし、KO.jsでこれを作る方法がわかりません。アドバイスをお願いします。

4

2 に答える 2

1

Knockout を使用すると、計算されたオブザーバブルを使用して、この問題を巧妙に解決できます :)

完全なコード例が必要な場合は、このソリューションを示すフィドルがあります

すべての人が呼び出されpeople、それがobservableArray:

var that = this;
this.people = ko.observableArray([{name: Joel, sex: male}, {name: Eric, sex: male},{name:Elliot, sex:female}, {name:Mary, sex:female}])

ここで、男性と女性だけを分離したい:

this.males = ko.computed(function(){
    return that.people().filter(function(person){
        return person.sex === "male";
    });
});
this.females = ko.computed(function(){
    return that.people().filter(function(person){
        return person.sex === "females ";
    });
});

(もちろん、この種のコードを何度も繰り返す場合は、自分で繰り返すのではなく、関数を作成してください:))

foreachその後、通常どおりバインディングを行うことができますfemalesmales

于 2013-09-08T08:13:18.273 に答える