Нокаутируемый наблюдаемый массив не работает должным образом

Я новичок в Knockout.js, я создал наблюдаемый массив и инициализировал его некоторыми данными. Я ожидаю, что каждый раз, когда пользовательский интерфейс изменяется (флажок или текстовые значения), модель также должна обновляться.

Я также подписался на массив. но мой метод обратного вызова никогда не вызывается.

var viewModel = {
    seats:ko.observableArray( [
        { "No": "1", "Booked": "" }, ...
    ] )
};

viewModel.seats.subscribe(
    function(newvalue){
        alert(newvalue);
    }
);

ko.applyBindings( viewModel);

http://jsfiddle.net/2NMJX/


person Brainchild    schedule 27.06.2012    source источник


Ответы (1)


Вы только что создали наблюдаемый массив — это означает, что вы получаете уведомление всякий раз, когда массив обновляется (элемент добавляется или удаляется, например: http://jsfiddle.net/2NMJX/1/), но не при обновлении самих элементов. Для этого вам нужно будет инкапсулировать значения в наблюдаемые:

seats: ko.observableArray( [
    { "No": ko.observable("1"), ...

Затем вы можете подписаться на эти наблюдаемые:

viewModel.seats()[0].No.subscribe( ...

http://jsfiddle.net/2NMJX/2/ (попробуйте изменить "1")

person Niko    schedule 27.06.2012
comment
Благодарю за разъяснение. По сути, я хотел бы получать уведомления с номером места всякий раз, когда изменяется состояние флажка. - person Brainchild; 27.06.2012
comment
Простой подход для этого — использовать функцию-конструктор, которая действует как класс, а не простые объекты: jsfiddle .net/2NMJX/3 - person Niko; 27.06.2012
comment
Вау.. Отлично!! Спасибо Нико. - person Brainchild; 27.06.2012
comment
Превосходный ответ. Спасибо за это. - person counterflow; 09.06.2013