2012-06-28 52 views
23

Tôi cần cập nhật giá trị phần tử mảng quan sát được. Mảng quan sát là tập hợp các đối tượng lớp. Trước tiên, tôi cần phải tìm ra đối tượng phù hợp theo id và cập nhật một số giá trị thuộc tính khác của đối tượng.Cập nhật Knockout.js Giá trị phần tử mảng quan sát

var Seat = function(no, booked) { 
    var self = this; 
    self.No = ko.observable(no); 
    self.Booked = ko.observable(!!booked); 

    // Subscribe to the "Booked" property 
    self.Booked.subscribe(function() { 
     alert(self.No()); 
    }); 
}; 

var viewModel = { 
    seats: ko.observableArray([ 
     new Seat(1, false), new Seat(2, true), new Seat(3, true), 
     new Seat(4, false), new Seat(5, true), new Seat(6, true), 
     new Seat(7, false), new Seat(8, true), new Seat(9, true) 
    ]) 
}; 

Có ai đề xuất phương pháp cập nhật mô hình xem không? Hãy nói rằng tôi muốn cập nhật giá trị đặt là "false" cho ghế không 2.

http://jsfiddle.net/2NMJX/3/

Trả lời

35

Đó là khá đơn giản với loại trực tiếp:

// We're looking for the Seat with this No 
var targetNo = 2; 

// Search for the seat -> arrayFirst iterates over the array and returns the 
// first item that is a match (= callback returns "true")! 
var seat = ko.utils.arrayFirst(this.seats(), function(currentSeat) { 
    return currentSeat.No() == targetNo; // <-- is this the desired seat? 
}); 

// Seat found? 
if (seat) { 
    // Update the "Booked" property of this seat! 
    seat.Booked(true); 
} 

http://jsfiddle.net/2NMJX/4/

+6

những gì xảy ra khi bạn có nhiều thuộc tính được đặt? như ở đây, chúng tôi chỉ có chỗ ngồi.Được đặt, có nhiều thuộc tính tôi muốn sử dụng plugin ko.mapper, có cách nào để làm điều đó không? – Tushar

+7

Bạn có thể sử dụng chức năng thay thế knockout để cập nhật toàn bộ mục: 'this.seats.replace (chỗ ngồi, newSeat); ' – jesal

+0

Tôi cần thêm thông tin về cách truy vấn được tạo ra cho máy chủ (tôi đoán mục có một số ID) và dữ liệu nào dịch vụ trả về (còn lại?) – Jorgelig

-8
viewModel.seats()[self.No()].Booked(true); 
Các vấn đề liên quan