2011-08-12 61 views
20

混凝土構件這似乎很容易,但兩小時後我的頭很痛。獲取從observableArray

我有一個categoryIndex(從選擇),我想從一個observableArray誰擁有該ID的類別。

我怎麼做到的?我試着用的indexOf(但林不知道它是如何工作,我看着當然DOC),我試過linq.js但哪裏是很難使用或IM愚蠢的(我不知道如何從一個類別獲得的Id並比較它)。

我observableArray是這樣的:

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

所以,我只需要一個方式來獲得「粉紅」的範疇,如果我的指數是2

謝謝。

編輯:

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

謝謝你,你是第一位的。但我得到空。我用代碼編輯。 selectedCategoryIndex是好的,它有正確的ID但是selectedCategory似乎是空的。順便說一句,爲什麼螢火蟲不適用於淘汰賽?它總是說this.categories()是空的,但是如果我將它分配給一個新的變量,螢火蟲可以在新變量中看到數據,但不在observableArray中。 –

+2

我的猜測是item.Id是2和$(「#Categories」)。val()是「2」。您可以對結果執行parseInt,或者使用==代替===。是否有一個原因,你閱讀元素的val()而不是在視圖模型中跟蹤該值? –

+1

Ouch,JS 1,me 0.我是一個試圖學習一些web開發者的桌面開發人員。我對html helpers(ASP.NET MVC)和knockout有不好的經驗,所以這就是爲什麼我不使用knockout來跟蹤我的DropDownList。再次感謝。 –