Suis-je trop le knock-out plugin de cartographie par toujours l'utiliser pour faire mon viewmodel?
Je suis encore à apprendre le bon usage de knock-out et j'ai trouvé moi-même rapidement s'éloigner de toujours taper ko.observable
lors de la configuration de mon viewmodel et, au lieu de simplement définir un objet littéral et le passer à travers la cartographie plugin avec quelque chose comme
var viewModel = ko.mapping.fromJS(data);
ou à tout le moins, quelque chose le long des lignes de farce à l'ensemble de mes données dans un attribut dans le viewModel comme
var viewModel = {
... events etc ... ,
"data": ko.mapping.fromJS(data)
}
Pour être honnête, la raison principale que j'ai fait c'est de refuser de type ko.observable
et ko.observableArray
de façon répétitive. Je suis juste essayer de comprendre si c'est une bonne approche et s'il y a des inconvénients à l'abandon du spécifique var x = ko.observable()
déclaration tous ensemble. Aussi, je suis en train de faire tout cela sur la charge, non pas en réponse à un appel ajax etc, qui d'après ce que je peux dire, est ce que le plugin de cartographie a été conçue pour.
Dans votre travail avec knock-out, avez-vous encore de déclarer des observables à la main, un par un, ou avez-vous allé à la cartographie.fromJS méthode que j'utilise? Sont-t-il des inconvénients à l'utilisation de la cartographie plugin si souvent comme cela?
Edit:
Exemple Précis
Dans cet article, Steve met en place son viewModel en faisant
var initialData = [ { ... } , { ... } ]; //json from the serializer
var viewModel = {
gifts : ko.observableArray(initialData)
};
Normalement, je voudrais utiliser ko.mapping.fromJS
pour ce genre de situation, en particulier pour assurez-vous que les objets dans le tableau sont transformés en des observables ainsi. En regardant ce qu'il a fait, mon approche semble que son exagéré, et ajoute un peu de surcharge inutile.
- Une considération que vous pourriez faire est de savoir si la cartographie crée un couplage étroit entre votre vue et de votre modèle de données. Aussi si vous avez besoin de rallonges. Ceux-ci peuvent être ajoutés à l'aide de la cartographie des options, mais peut alors devenir difficile à gérer si vous êtes l'extension de la plupart de vos observables, comme cela peut arriver avec de la validation du formulaire.
Vous devez vous connecter pour publier un commentaire.
Ma suggestion pour vous serait de même de l'autre remis en question je viens de répondre à https://stackoverflow.com/questions/7499133/mapping-deeply-hierarchical-objects-to-custom-classes-using-knockout-mapping-plug.
Votre raisonnement pour l'utilisation de la cartographie plug-in est raisonnable et celui que j'utilise. Pourquoi le type que le code que vous avez à?
Dans mon expérience avec knock-out (tous les 4 mois), j'ai trouvé que le moins que je fais manuellement et de laisser le knock-out routines de faire leur chose, le mieux mes applications semblent fonctionner. Ma suggestion est d'essayer l'approche la plus simple d'abord. Si il ne répond pas à vos besoins, à regarder comment l'approche la plus simple est de le faire de la "chose" et de déterminer ce qui doit changer pour répondre à vos besoins.
Après l'utilisation de knock-out pour un peu plus de temps, j'ai remarqué que le plugin de cartographie a quelques options supplémentaires que vous donner beaucoup plus de précision, le contrôle sur le processus de cartographie.
De contrôle du type et de la quantité de propriétés généré
Il y a plusieurs façons de le faire, et je vais aller sur quelques-uns, mais le résultat final est que vous vous retrouvez avec une version plus légère de la cartographie plugin parce que tout n'est pas observable.
Fondamentalement, vous laissez tout ce que vous ne pensez pas que va changer, comme une propriété classique et faire seulement observables de l', des éléments spécifiques que vous voulez observer.
Faire
mapping
omettre certaines propriétésVous pouvez faire de la cartographie plugin omettre propriétés entièrement à partir de la fin résultat en spécifiant des choses comme
ignore
ouinclude
. Ces deux accomplir la même chose, juste en face de moyens.Remarque: les Échantillons sont de la knockout.js plugin de cartographie de la documentation, les commentaires ajoutés par moi
Plugin De Cartographie Argument:
include
L'extrait de code suivant va omettre toutes les propriétés de l'objet source autres que celles qui sont passées par le
include
argument.Plugin De Cartographie Argument:
ignore
Si vous voulez seulement de omettre certaines propriétés de l'objet source, utilisez la
ignore
argument comme indiqué ci-dessous. Il fera observables à partir de toutes les propriétés de l'objet source, sauf pour les propriétés spécifiées.De contrôle de quelles propriétés sont ou ne sont pas observables
Si vous avez besoin d'inclure des propriétés, mais vous ne pensez pas qu'ils doivent être faits observables (pour quelque raison que ce soit), la cartographie plugin a quelque chose qui peut aider.
Plugin De Cartographie Argument:
copy
Si vous voulez que le plugin de cartographie de copier simplement la plaine de propriétés et de ne pas les rendre observables, l'utilisation de cet argument, comme indiqué ci-dessous.
Prendre le contrôle complet sur le processus de cartographie
Si vous voulez avoir le contrôle à 100% sur ce qui est créé dans le processus de cartographie, notamment la possibilité de mettre des fermetures et des abonnements à vos objets, alors vous voulez utiliser l'option "créer".
plaine résultat avec des propriétés calculées
Voici un exemple où j'ai été de cartographie des données à partir d'un appel ajax vers un objet avec un
results
de la propriété. Je ne voulais plus rien observables et je voulais juste un simple généré propriété qui pourrait être faite de l'autre simple, les propriétés sur l'objet. Peut-être pas la plus convaincante exemple, mais il montre la fonctionnalité.des abonnements et de la fermeture et de la cartographie, oh mon
Autre situation: si vous voulez des fermetures et des abonnements dans votre suite. Cet exemple est trop long pour être inclus dans son intégralité, mais pour un véhicule de la marque/le modèle de la hiérarchie. Je voulais tous les modèles (les enfants) pour un faire (parent) à être non-activé si le modèle n'a pas activé et je voulais que cela soit fait avec un abonnement.
Dans l'ensemble, ce que j'ai trouvé, c'est que vous aurez rarement besoin de 100% de l'objet que vous d passer pour le plugin et vous aurez rarement besoin de 100% de celui-ci pour être observable. Creuser avec la cartographie des options de configuration et de créer toutes sortes de complexes et de simples objets. L'idée est d'obtenir tout ce dont vous avez besoin, rien de plus ou de moins.
Allen, ma récente expérience d'apprentissage avec Knockout.js a été similaire à la vôtre. Nous travaillons avec une profonde hiérarchique de l'objet graphique à partir du serveur et je l'ai défini explicite instanciables modèle de vue des fonctions qui permettent de préserver la structure de base il.
J'ai commencé par la définition de chaque propriété explicitement comme un fait observable sur le modèle de vue, mais qui est rapidement sorti de la main. Aussi, l'une des principales raisons pour la commutation à l'aide de la cartographie plugin a été que nous avons à faire de fréquents Ajax postes du graphique sur le serveur où il est fusionné avec le persistantes version, puis validée sur le serveur d'une façon telle que de nombreuses propriétés peuvent changer et que les collections soient modifiés, et une nouvelle instance retournée comme l'Ajax résultat où il doit être re-fusionné avec le client de la représentation. Que sont devenus sérieusement difficile, et le plugin de cartographie aidé les grands temps en permettant la spécification des identifiants pour résoudre ajoute /supprime /mises à jour et pour remapper une mise à jour graphique sur l'original.
Il a aussi contribué à la création graphique d'origine grâce à l'utilisation de l'option "créer" pour les sous-modèles de vue. Dans chaque modèle de vue constructeur-je recevoir une référence à la vue parent modèle et les données qui leur permettent de construire l'enfant de la vue du modèle, de créer de nouvelles options de configuration pour créer des petits-enfants de l'transmis des données sur l'enfance.
Le seul (léger) bémol j'ai récemment trouvé, comme détaillé dans cette question, est que lors de la ko.la cartographie.la méthode toJSON il n'a pas de crochet dans toute la méthode toJSON remplacements que vous avez défini sur les prototypes de modèles de vue afin d'exclure les propriétés de la sérialisation. J'ai été en mesure de contourner en spécifiant des options à ignorer dans le le détachement, comme recommandé par Ryan Niemeyer dans ce post.
Donc en résumé, je vais certainement être coller avec le plugin de cartographie. Knockout.js des règles.
Plus simple, mais aide-plein d'add-on peut être de knock-out de données-projections
Actuellement, il ne gère pas les js pour viewmodel mappages, mais il gère assez bien le modèle de vue JS mappages.
ko.toJS
mais avec un plus complet ensemble de paramètres. J'ai été déçu quetoJS
ne semblent pas être pris à la suite complète de l'objet paramètres de translation que lemapping
plugin prend.