KnockoutJS subskrybuje zmiany właściwości za pomocą wtyczki Mapping

Czy mimo to mogę powiedzieć, że wtyczka mapowania knockout subskrybuje wszystkie zmiany właściwości wywołujące określoną funkcję?

Zdaję sobie sprawę, że mogę ręcznie subskrybować zdarzenie zmiany właściwości w ten sposób:

<code>var viewModel = {
    name: ko.observable('foo'),
}

// subscribe manually here
viewModel.name.subscribe(function(newValue){
   // do work
})
</code>

Chciałbym jednak być w stanie subskrybować ogólnie, ponieważ moje modele widoków mogą się różnić, nie chcę kodować nazw właściwości. Stworzyłem funkcję, która to robi, ale może nie być najlepszym podejściem. Działa na wszystkich przeglądarkach z wyjątkiem IE7 i poniżej.

Tutaj biorę viewmodel jako argument i próbuję zastanowić się nad subskrybowaniem właściwości:

<code>function subscribeToKO(data) {

        $.each(data, function (property, value) {
            if (getType(value) == "Object")
                data[property] = subscribeToKO(value);
            else if (getType(value) == "Array") {
                $.each(value, function (index, item) {
                    item = subscribeToKO(item);
                });
            }
            else {
                if (value.subscribe) {
                    value.subscribe(function (newValue) {
                        // do work                                         
                    });
                }
            }
        });
        return data;
    }
</code>

Tak jak powiedziałem, to działa, ale ponieważ używam mapowania, miałem nadzieję, że istniał hak, którego mogłem użyć, aby udostępnić mu funkcję, która generalnie subskrybuje zmiany własności.

Coś jak:

<code>mapping = {
   create: function(options){
       options.data.subscribe(function(newValue){
            // do work ???
       });
   }
}

ko.mapping.fromJS(viewModel, mapping);
</code>

Jakieś pomysły?

questionAnswers(2)

yourAnswerToTheQuestion