2011-08-12 20 views
20

これは簡単ですが、2時間後に頭が痛いです。observableArrayからの具体的な要素の取得

私はcategoryIndex(selectから)を持っており、そのIDを持つobservableArrayからカテゴリを取得したいと考えています。

どうすればいいですか?私はindexOfで試しました(しかし、どのように動作し、私はもちろんdocを見ました)、私はlinq.jsを試しましたが、Whereは使いにくいですか、Imは愚かです(私はカテゴリからIDを取得する方法がわかりませんそれを比較する)。

マイobservableArrayはこれです:だから

categories[category { Id=2, Name="Pink", ...}, category { Id=1, Name="Green", ...}] 

私の指数は2

であれば、私はちょうどありがとう「ピンク」のカテゴリを取得するために、一つの方法が必要です。

EDIT:

viewModel.addNote = function() { 
    var selectedCategoryIndex = $("#Categories").val(); 
    var selectedCategory = ko.utils.arrayFirst(this.categories(), function(item) { 
     return item.Id === selectedCategoryIndex; 
    }); 

}.bind(viewModel); 

答えて

47

私は普通の事のこのタイプを行うにKOユーティリティ機能ko.utils.arrayFirstを使用しています。配列をループし、渡された述語と一致する最初の項目を返します。

あなたはこのようにそれを使用します。

selectedId = 2; 

var category = ko.utils.arrayFirst(categories(), function(category) { 
    return category.Id === selectedId; 
}); 
+1

おかげで、あなたはナンバーワンです。しかし、私はnullになっています。私はコードを編集しました。 selectedCategoryIndexは正常ですが、正しいIDを持っていますがselectedCategoryはnullのようです。 Btw、なぜ火かき棒はノックアウトで正しく動作しないのですか? this.categories()は空であると言いますが、新しいvarにその変数を代入すると、firebugはobservableArrayではなく新しいvarのデータを見ることができます。 –

+2

私の推測ではitem.Idは2で$( "#Categories")です。val()は "2"です。結果にparseIntを実行するか、===の代わりに==を使用することができます。あなたのビューモデルでその値を追跡するのではなく、要素のval()を読んでいる理由はありますか? –

+1

Ouch、JS 1、私0。私はデスクトップ開発者もいくつかのWeb開発者を学ぼうとしています。私はhtmlヘルパー(ASP.NET MVC)とノックアウトに悪い経験をしていたので、ノックアウトを使ってDropDownListを追跡していません。再度、感謝します。 –