34 votes

Knockout discret

J'ai récemment obtenu jusqu'à la vitesse avec knock-out et je pense que c'est un cadre fantastique. Cependant j'ai une préoccupation.

Je suis la recherche que dans la non-trivial de liaison des cas, j'ai des extraits de code javascript qui se glissent dans mon point de vue (balisage). En fait, quelques exemples de code dans le knock-out de la documentation de démontrer ce trop.

N'est-ce knock-out foncièrement gênant?

Dois-je juste l'accepter pour ce qu'elle est et de ne pas être inquiété dans la pratique?

Ou il y a des motifs techniques que je devrais employer pour faire de knock-out discret?

21voto

Michael Berkompas Points 1299

Grande question. J'ai écrit complexe KnockoutJS vues depuis un certain temps et n'a jamais été satisfait jusqu'à ce que je suis passé à Ryan Niemeyer classe de liaison fournisseur.

Le knock-out ClassBindingProvider vous permet de déclarer vos fixations dans un objet JavaScript et ensuite de référence à partir d'un data-class attribut similaire à la façon dont les classes css de travail. Il fonctionne très bien!

Voir un exemple TodoMVC app.

16voto

Anders Points 7110

Essayez de garder le Javascript de liaisons et de ne les utiliser que pour les métadonnées

donc au lieu de faire

<span data-bind="visible: errors().length > 0">You have errors</span>

Utiliser un calculées observables

<span data-bind="visible: hasErrors">You have errors</span>

Mise à jour: je suis allé de l'avant et a créé une Convention over configuration de l'API pour KO Il peut être trouvé ici https://github.com/AndersMalmgren/Knockout.BindingConventions/wiki

Au lieu de faire <button data-bind="click: save">Save</button> vous faisons <button data-name="save">Save</button>. La bibliothèque de la comprendre par la convention que vous souhaitez pour le raccordement de la fonction enregistrer pour le bouton gestionnaire de clic. Par convention, il lie également l'activer si un canSave membres est présente. http://jsfiddle.net/3Ajnj/15/

5voto

Mike Bell Points 642

Dois-je juste l'accepter pour ce qu'elle est et de ne pas être inquiété dans la pratique?

Ma compréhension est que "discrète" signifie différentes choses.

Un aspect de la "discrète" est que les sites web devraient maintenir la fonctionnalité de base sur les navigateurs ayant limité la prise en charge JavaScript ou pas du tout. À cette fin, vos préoccupations à ce principe devrait dépendent de votre public cible. J'ai travaillé sur des projets où je savais que mon public cible assez bien ce que j'ai eu le luxe de dire "si vous voulez prendre avantage de cette application web, d'utiliser un navigateur moderne comme Chrome, avec JavaScript activé." Dans ce cas, n'hésitez pas à aller buck sauvage avec la dernière, awesomest avant la fin de cadres de là-bas.

J'ai travaillé sur d'autres projets où ce n'était pas le cas, nous avons dû être très prudent avec l'utilisation des frameworks comme knock-out. Si vous êtes en s'appuyant fortement sur le knock-out à faire à la fonctionnalité de base dans votre application, votre application est en soi gênant. Si oui ou non cela devrait vous dérange dépend de votre public cible.

Un autre principe de la "discrète JS" est une séparation des préoccupations entre le JavaScript et le HTML. Je fait débat strictement important ce principe. Je pense que le plus important principe de la séparation des préoccupations entre le modèle de vue de la logique et de la logique d'affichage, à la suite de la pattern MVVM. Knock-out fait un travail fantastique pour encourager la séparation de vue/vm préoccupations, même si vous mettez un peu de JavaScript de logique dans vos liaisons de données. Tant que c'est strictement vue logique, je pense qu'il en fait appartient à la vue.

4voto

Peter Goodheart Points 69

Je vous recommande de visiter le blog de Ryan et de lire: "Simplifier et nettoyer les vues dans KnockoutJS", si vous ne l'avez pas encore fait ...

http://www.knockmeout.net/2011/08/simplifying-and-cleaning-up-views-in.html

Il explique quelques bonnes façons de refactoriser votre code, donc il n'encombre pas le html et le garde plus propre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X