2011-08-12 34 views
20

Điều này có vẻ dễ dàng nhưng sau hai giờ đầu tôi đau.Lấy phần tử bê tông từ một ObservableArray

Tôi có categoryIndex (từ một lựa chọn) và tôi muốn lấy danh mục từ observableArray có Id đó.

Tôi làm như thế nào? Tôi đã thử với indexOf (nhưng Im không chắc chắn nó hoạt động như thế nào và tôi nhìn tài liệu của khóa học), tôi đã thử linq.js nhưng ở đâu là khó sử dụng hoặc Im ngu ngốc (Tôi không biết làm thế nào để có được Id từ một thể loại và so sánh nó).

observableArray của tôi là:

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

Vì vậy, tôi chỉ cần một cách để có được sự "màu hồng" loại nếu Index của tôi là 2.

Cảm ơn bạn.

EDIT:

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

}.bind(viewModel); 

Trả lời

47

Tôi thường sử dụng một tiện ích chức năng KO ko.utils.arrayFirst để làm kiểu này mà. Nó chỉ lặp qua một mảng và trả về mục đầu tiên khớp với biến vị ngữ được truyền cho nó.

Bạn sẽ sử dụng nó như thế này:

selectedId = 2; 

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

Cảm ơn, bạn là số một. Nhưng tôi nhận được vô giá trị. Tôi đã chỉnh sửa bằng mã. selectedCategoryIndex là ok, nó có Id đúng nhưng selectedCategory có vẻ là null. Btw, tại sao firebug không hoạt động đúng với loại trực tiếp? nó luôn luôn nói rằng this.categories() trống nhưng nếu tôi gán nó cho một var mới, firebug có thể thấy dữ liệu trong var mới nhưng không có trong observableArray. –

+2

Đoán của tôi là item.Id là 2 và $ ("# Danh mục"). Val() là "2". Bạn có thể làm một parseInt trên kết quả hoặc sử dụng == thay vì ===. Có một lý do tại sao bạn đang đọc val() của một phần tử thay vì có giá trị đó được theo dõi trong mô hình khung nhìn của bạn không? –

+1

Ouch, JS 1, tôi 0. Im một dev máy tính để bàn cố gắng để tìm hiểu một số dev web quá. Tôi đã có kinh nghiệm xấu với những người giúp đỡ html (ASP.NET MVC) và loại trực tiếp vì vậy đó là lý do tại sao Im không sử dụng loại trực tiếp để theo dõi DropDownList của tôi. Cảm ơn một lần nữa. –

Các vấn đề liên quan