淘汰赛,如何订阅observableArray中的每一个变化

Ark*_*Ark 5 javascript knockout.js

你可以帮助我订阅我的可观察收藏品的每次变化和每个项目的变化.没有在http://knockoutjs.com/documentation/observableArrays.html上找到相关信息

$(document).ready(function () {

    var Item = function (isSelected, isEnabled, errorState,
    name, group, processed, errors, state) {
        var self = this;
        self._isSelected = ko.observable(isSelected);
        self._isEnabled = ko.observable(isEnabled);
        self._errorState = ko.observable(errorState);
        self._name = ko.observable(name);
        self._group = ko.observable(group);
        self._processed = ko.observable(processed);
        self._errors = ko.observable(errors);
        self._state = ko.observable(state);
    };

    function ViewModel() {
        var self = this;
        self.SentinelList= ko.observableArray([
        ko.observable(new Item(false, false, false, 'Mail1', 'Mailing', 4, 0, 1)),
        ko.observable(new Item(false, false, false, 'Ident1', 'Identity', 5, 0, 0)),
        ko.observable(new Item(false, false, false, 'Cook', 'Look', 2, 0, 1))]);
    }

    var vm = new ViewModel();

    for (var item in vm.SentinelList) {
        item.subscribe(function () {
            console.log('List changed');
        });
    }

    ko.applyBindings(vm);
});
Run Code Online (Sandbox Code Playgroud)

Dam*_*ien 7

你可以在数组中使用subscribe:

    self.SentinelList.subscribe(function (changes) {

        changes.forEach(function (change) {
            if (change.status === 'added') {
                 console.log('new item !!');
                 change.value.subcriptions.push(change.value.subscribe(event));
            } else if (change.status === 'deleted') {
                ko.utils.arrayForEach(change.value.subcriptions, function(s) {
                    if(s) s.dispose();
                }
                                     );
                console.log('deleted item !!');
            }
        });

    }, null, "arrayChange");
Run Code Online (Sandbox Code Playgroud)

看小提琴