2011-08-12 16 views
20

Wydaje się to łatwe, ale po dwóch godzinach boli mnie głowa.Uzyskiwanie elementu betonowego z obserwowalnego obiektu

Mam categoryIndex (od wyboru) i chcę uzyskać kategorię od obserwowalnych Array, które mają ten Id.

Jak to robię? Próbowałem z indexOf (ale nie jestem pewien jak to działa i wyglądałem na dokument oczywiście), próbowałem linq.js, ale Gdzie jest trudne w użyciu lub jestem głupi (nie wiem jak uzyskać identyfikator z kategorii i porównaj to).

Moja observableArray to:

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

Tak, muszę tylko jeden sposób, aby uzyskać kategorię "pink" jeśli moja Index to 2.

Dziękuję.

EDIT:

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

}.bind(viewModel); 

Odpowiedz

47

Zwykle używam KO funkcję użytkową ko.utils.arrayFirst robić tego typu rzeczy. Po prostu przechodzi przez tablicę i zwraca pierwszy element pasujący do przekazanego do niego predykatu.

będzie go używać tak:

selectedId = 2; 

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

Dzięki, że jesteś numerem jeden. Ale otrzymuję zero. Edytowałem z kodem. selectedCategoryIndex jest ok, ma właściwy ID, ale selectedCategory wydaje się mieć wartość null. Btw, dlaczego firebug nie działa poprawnie z nokautem? zawsze mówi, że this.categories() jest puste, ale jeśli przypiszę to do nowego var, firebug może zobaczyć dane w nowym var, ale nie w obserservArray. –

+2

Domyślam się, że item.Id ma wartość 2 i $ ("# Categories"). Val() to "2". Możesz zrobić parseInt na wyniku lub użyć == zamiast ===. Czy jest jakiś powód, dla którego czytasz wartość val() elementu, zamiast śledzić tę wartość w modelu widoku? –

+1

Ouch, JS 1, ja 0. Jestem twórcą komputerów, próbującym nauczyć się trochę web dev też. Miałem złe doświadczenia z pomocnikami html (ASP.NET MVC) i nokautem, dlatego nie używam nokautu do śledzenia mojej DropDownList. Dzięki jeszcze raz. –

Powiązane problemy