KnockoutJS assina as alterações de propriedade com o plugin de mapeamento

Existe alguma maneira eu posso dizer o plugin de mapeamento knockout para se inscrever em todas as alterações de propriedade chamar uma certa função?

Eu percebo que posso assinar manualmente o evento de alteração de propriedade dessa maneira:

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

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

Eu gostaria de poder me inscrever genericamente, já que meus modelos de visão podem variar, não quero codificar os nomes das propriedades. Eu criei uma função que faz isso, mas pode não ser a melhor abordagem. Funciona em todos os navegadores, exceto no IE7 e abaixo.

Aqui eu tomo um viewmodel como argumento e tento refletir sobre ele assinando as propriedades:

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

Como eu disse, isso funciona, mas como estou usando o plug-in de mapeamento, esperava que houvesse um gancho que eu pudesse usar para fornecer uma função que se inscrevesse genericamente em mudanças de propriedade.

Algo como:

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

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

Alguma ideia?

questionAnswers(2)

yourAnswerToTheQuestion