¿Hay alguna forma en que pueda decirle al complemento de mapeo de desactivación que se suscriba a todos los cambios de propiedad llame a cierta función?KnockoutJS suscríbase a cambios de propiedad con el complemento de mapeo
Soy consciente de que puedo suscribir de forma manual para el evento de cambio de propiedad de esta manera:
var viewModel = {
name: ko.observable('foo'),
}
// subscribe manually here
viewModel.name.subscribe(function(newValue){
// do work
})
me gustaría ser capaz de suscribirse de forma genérica sin embargo, desde mi punto de vista los modelos pueden variar, yo no quiero codificar los nombres de las propiedades. Creé una función que hace esto, pero puede que no sea el mejor enfoque. Funciona en todos los navegadores, excepto en IE7 y versiones posteriores.
Aquí me tomo un modelo de vista como un argumento y tratar de reflejar en él la suscripción de las propiedades:
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;
}
Como he dicho esto funciona, pero desde que estoy usando el pluging mapeo Tenía la esperanza de que había una gancho que podría usar para proporcionarle una función que se suscribirá genéricamente a los cambios de propiedad.
Algo así como:
mapping = {
create: function(options){
options.data.subscribe(function(newValue){
// do work ???
});
}
}
ko.mapping.fromJS(viewModel, mapping);
¿Alguna idea?