L'ajout de propriétés à la vue du modèle créé en utilisant le knock-out JS plugin de cartographie
Je suis en train de travailler à travers la cartographie plugin exemple sur le Knockoutjs site web.
C'est l'exemple des données.
Knock-out JS Plugin de Cartographie
var data = {
name: 'Scott',
children: [
{ id : 1, name : 'Alice' }
]
}
L'exemple montre comment remplacer la cartographie pour l'un des enfants, mais comment puis-je modifier la cartographie de l'objet de base.
Si par exemple je voulais ajouter un "FavouriteChild" propriété de Scott comment m'y prendre?
Je suppose que j'ai besoin d'utiliser la fonction create sur la cartographie de base, mais je ne peux pas trouver un exemple de la syntaxe n'importe où.
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 accepté de répondre ci-dessous j'ai trouvé que c'
<span data-bind='text: AdditionalProperty'>
Le knock-out code
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);
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser un
create
méthode sur l'objet de mappage de lui-même comme:Voici une poursuite de cette réponse sur la base de RP Niemeyer solution
Cette réponse est basée sur la solution ci-dessus et de son blog, Merci pour ça! J'ai pensé que je devrais ajouter quelques détails, car il répond à quand le tableau n'est pas un premier niveau d'objet.
Noter que la personne est le premier niveau de l'objet et des enfants est sous la propriété de cette personne. La ligne viewModel.personne = ko.la cartographie.fromJS(viewModel.personne, cartographie) n'était pas intutive pour moi à la première.
Et ici est une légère variation
La personne objet est une observable qui est ajouté ou mis à jour après il est créé à partir du serveur de données json.
De liaison sont code dans le html
En fin de compte, vous aurez besoin de mettre pour l'utiliser à un certain point comme ceci:
Merci pour votre aide! Je ne pouvais pas avoir fait cela loin sans votre blog.
Noter que pour définir d'autres calculée observables sur un enfant vous aurez besoin de passer à une autre série d'options de correspondance
Un autre exemple basé sur les exemples fournis par Jason et RP Niemeyer.
data
est ce que nous obtenons après une requête ajax, à laquelle nous ajoutons deux imbriqués observables (viewModel.weekly.selectedWeek
etviewModel.monthly.selectedMonth
):