23

監視可能な配列要素の値を更新する必要があります。監視可能な配列は、クラス オブジェクトのコレクションです。最初に、一致するオブジェクトを ID で見つけて、オブジェクトの他のプロパティ値を更新する必要があります。

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)
    ] )
};

ビューモデルを更新するアプローチを提案できる人はいますか? 座席番号 2 の予約値を「false」に更新するとします。

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

4

2 に答える 2

34

ノックアウトを使用すると、それは非常に簡単です。

// 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/

于 2012-06-28T14:25:15.307 に答える
-9
viewModel.seats()[self.No()].Booked(true);
于 2013-03-17T09:56:32.167 に答える