Estoy trabajando a través del ejemplo del complemento de mapeo en el sitio web de Knockoutjs.Agregando propiedades al modelo de vista creado usando el plugin de mapeo Knockout JS
Este es el ejemplo de datos.
var data = {
name: 'Scott',
children: [
{ id : 1, name : 'Alice' }
]
}
El ejemplo muestra cómo reemplazar la asignación para uno de los niños pero ¿cómo altera el mapeo para el objeto base.
Si, por ejemplo, quisiera agregar una propiedad de "FavouriteChild" a Scott, ¿cómo lo haré?
Supongo que necesito usar la función de creación en la asignación base, pero no puedo encontrar un ejemplo de la sintaxis en ninguna parte.
var myChildModel = function(data) {
ko.mapping.fromJS(data, {}, this);
this.nameLength = ko.computed(function() {
return this.name().length;
}, this);
}
var mapping = {
'children': {
create: function(options) {
return new myChildModel(options.data);
}
}
}
var viewModel = ko.mapping.fromJS(data, mapping);
EDIT: De la respuesta aceptada a continuación he encontrado que esto funcione
<span data-bind='text: AdditionalProperty'>
El código nocaut
var mapping = {
create: function (options) {
//customize at the root level.
var innerModel = ko.mapping.fromJS(options.data);
innerModel.AdditionalProperty = 'Hello World';
return innerModel;
}
}
var viewModel = ko.mapping.fromJS(data, mapping);
//use this as our model bindings
ko.applyBindings(viewModel);
¿Qué hay de explicar cómo, que crean con una función de vacío no demuestra nada acerca del acceso a la raíz nivel y agregando a esto. –
actualizó la función para mostrar cómo mapearía y manipularía el resultado antes de devolverlo. –
Sé que esta es una pregunta muy antigua, pero habiéndolo descubierto quería hacer una sugerencia. El ejemplo de código para usar la devolución de llamada de creación al mapear (en el sitio de KnockoutJs) no explica que el método de creación está en el objeto de mapeo. Ryan, si puedes, le pediría al propietario del sitio que reemplace su muestra de código con la suya anterior. –