Quelles sont les forces et les faiblesses réelles des nombreux cadres fondés sur l'épine dorsale?js? [fermé]
J'espère que quelqu'un pourra partager son expérience avec une partie de la dernière colonne vertébrale émergente.js variantes. J'ai une bonne expérience avec backbone/underscore / require dans plusieurs projets et je voudrais passer à l'étape suivante vers des solutions plus avancées pour la structure d'application complexe.
je sais que les cadres suivants sont disponibles:
- Marionnette
- Geppetto (basé sur marionnette)
- Chaplin , Chaplin - charlie chaplin-standard
- vertèbres
- LayoutManager
- Thorax
- Aura
- Luca
- Singool
- backstack
- l'épine Dorsale de l'INTERFACE utilisateur
-
BTW - excellent point de départ pour un projet de grande ampleur,
et j'en ai probablement manqué quelques-uns.
il y a un brève introduction sur les différences ici:
mais c'est très général. Je me demandais si quelqu'un pouvait partager son expérience avec des applications de la vie réelle en utilisant ces cadres.
Quel est l'avantage de choisir l'un plutôt que l'autre? Quand marionette sera une meilleure solution sur chaplin, ou pourquoi vetebrae est mieux pour certaines applications, pour exemple.
bien sûr, la réponse évidente sera " utilisez ce qui est le mieux pour vos besoins ", mais je manque de l'expérience avec ces cadres pour connaître leur force/but/avantages ou scénarios préférés.
Merci!
Edit 1: trouvé ce post: colonne vertébrale.Marionette vs épine dorsale-bobineau
Edit 2: réponse de Mathias schafer (Chaplin) par courrier:
en bref, la structure actuelle est proche de la version 1.0 puisqu'elle est déjà utilisée en production. Nous ne prévoyons pas d'ajouter de nouvelles fonctionnalités ou de casser les changements D'API avant 1.0.
Marionette est certainement la bibliothèque la plus complète et la plus stable. Il aborde plusieurs aspects du développement de l'application JS avec Backbone. Par exemple, il a une couche de vue forte qui épine dorsale elle laisse complètement vide. Bien sûr, vous constaterez que certains aspects ne répondront pas à vos exigences et vous pourriez ressentir le besoin de mettre en place une structure autour de la Marionnette.
en revanche, Chaplin se concentre sur un aspect plutôt petit, mais très important des applications de base, à savoir la structure globale de l'application et le cycle de vie du module. À cet égard, Chaplin est très clairvoyant et ressemble plus à un framework qu'à une bibliothèque (comme dans "votre code appelle une bibliothèque, un framework appelle votre code.)" Chaplin fournit quelques classes centrales qui se trouvent au-dessus des modules d'application individuels et contrôlent l'état général de l'application. Cela donne à votre application une structure conventionnelle comme Ruby on Rails le fait par exemple.
dans Chaplin, vous déclarez certaines routes qui se dirigent vers les contrôleurs, et Chaplin démarre le contrôleur une fois la correspondance de route. Il prend également soin de la disposition des anciens contrôleurs, et l'affichage et la dissimulation des vues principales, qu'un contrôleur est censé créer. C'est l'idée de base, mais Chaplin s'occupe des vilains détails pour que tout se passe bien.
il y a deux principes qui accompagnent cette structure: - Modularisation, découplage et sablage - Communication intermodale en utilisant Publish / Subscribe et Mediator(s)
bien sûr, ces modèles ne sont pas nouveaux dans le monde du développement de logiciels, et Chaplin N'est pas la seule bibliothèque qui les applique à Backbone.js apps.
Chaplin fournit également des améliorations pour la couche de vue, par exemple une vue de collection très sophistiquée, mais au total pas autant que Marionette avec ses régions et Layouts. Mais il est relativement facile d'écrire de telles méta-classes, en utilisant les moyens Chaplin Vues.
5 réponses
la plupart du temps? les cadres que vous regardez résolvent les mêmes problèmes, mais ils le font de manière légèrement différente avec des buts légèrement différents.
je pense qu'il est juste de dire que tous ces projets résoudraient les problèmes dans ces catégories:
- Offrir un assortiment de défaut
- Réduire code réutilisable
- fournir la structure d'application sur le dessus de la BackboneJS blocs de construction
- extraire les modèles que les auteurs utilisent dans leurs applications
Marionette, que je construis depuis décembre 2011, a quelques objectifs et idéaux très distincts à l'esprit, ainsi:
- Composite de l'architecture de l'application
- Entreprise modèle de messagerie influence
- Options de modularisation
- Différentiels utilisation (pas tout-ou-rien)
- Aucun serveur de lock-in
- le Rendent facile de changer ces valeurs par défaut
- Code de configuration / configuration
Je ne dis pas qu'aucun des autres cadres n'a les mêmes objectifs. Mais je pense que le caractère unique de Marionette vient de la combinaison de ces objectifs.
Composite De L'Architecture De L'Application
j'ai passé plus de 5 ans à travailler dans des systèmes logiciels distribués à gros clients utilisant WinForms et C#. J'ai créé des applications pour ordinateur de bureau, Ordinateur Portable (smart-client), appareils mobiles et applications web, tous partageant un ensemble fonctionnel de base et de travailler avec le même serveur back-end de nombreuses fois. Pendant ce temps, j'ai appris la valeur de la modularisation et j'ai suivi très rapidement une voie de conception d'application composite.
L'idée de base est de "composer" de votre application d'exécution faites l'expérience et traitez de nombreuses petites pièces individuelles qui ne se connaissent pas nécessairement. Ils s'inscrivent dans le système d'application composite global et communiquent ensuite par divers moyens de messages et d'appels découplés.
j'ai écrit un petit peu à ce sujet sur mon blog, présentant Marionette comme une architecture d'application composite pour L'épine dorsale:
- http://lostechies.com/derickbailey/2011/11/17/introduction-to-composite-javascript-apps/
- http://lostechies.com/derickbailey/2011/12/12/composite-js-apps-regions-and-region-managers/
Messages Queues /Patterns
les mêmes systèmes distribués à grande échelle ont également profité de la mise en file d'attente des messages, des modèles d'intégration des entreprises (Modèles de messagerie) et des services des bus pour gérer les messages. Cela, plus que toute autre chose, a eu une influence énorme sur mon approche du développement de logiciels découplés. J'ai commencé à voir des applications WinForms mono-processus, en mémoire de cette perspective, et bientôt mon côté serveur et le développement d'applications web ont pris l'influence de ceci.
cela s'est traduit directement dans la façon dont je regarde la conception de L'application de base. Je fournis un agrégateur d'événements en marionnette, à la fois pour le niveau élevé Objet de l'Application, et pour chaque module que vous créez dans l'application.
je pense aux messages que je peux envoyer entre mes modules: messages de commande, messages d'événement, et plus encore. Je pense également à la communication côté serveur comme des messages avec ces mêmes modèles. Certains modèles ont fait leur chemin dans la Marionnette déjà, mais certains n'ont pas encore.
- http://lostechies.com/derickbailey/2011/07/19/references-routing-and-the-event-aggregator-coordinating-views-in-backbone-js/
- http://lostechies.com/derickbailey/2012/04/03/revisiting-the-backbone-event-aggregator-lessons-learned/
- http://lostechies.com/derickbailey/2009/12/23/understanding-the-application-controller-through-object-messaging-patterns / (WinForms code, but toujours applicable)
modularisation
la modularisation du code est extrêmement importante. La création de petits paquets bien encapsulés qui ont une focalisation unique avec des points d'entrée et de sortie bien définis est un must pour tout système de n'importe quelle taille significative et complexité.
marionnette fournit la modularisation directement à travers ses module
définitions. Mais je reconnais aussi que certaines personnes comme RequireJS et souhaitez l'utiliser. Donc, je fournis à la fois une construction standard et une construction compatible Requesjs.
MyApp = new Backbone.Marionette.Application();
MyApp.module("MyModule", function(MyModule, MyApp, Backbone, Marionette, $, _){
// your module code goes here
});
(aucun billet de blog disponible pour cette fois)
Utilisation Supplémentaire
C'est l'une des philosophies fondamentales que je cuisine pour chaque partie de la marionnette que je peux: pas d'exigence de" tout ou rien " pour l'utilisation de la Marionnette.
LaBackbone elle-même adopte une approche très progressive et modulaire avec tous les c'est bloc de construction des objets. Vous êtes libre de choisir ceux que vous souhaitez utiliser, quand. Je crois fermement en ce principe et je m'efforce de faire en sorte que Marionette fonctionne de la même manière.
à cette fin, la majorité des pièces que j'ai construites pour Marionette sont construites pour être autonomes, pour travailler avec les pièces centrales de L'épine dorsale, et pour travailler ensemble encore mieux.
par exemple, presque chaque application de base doit montrer dynamiquement une colonne vertébrale afficher dans un certain endroit sur l'écran. Les applications doivent également gérer la fermeture des anciennes vues et le nettoyage de la mémoire lorsqu'une nouvelle est mise en place. C'est ici que le Region
de Marionette entre en jeu. Une région gère le code boilerplate de taking a view, calling render on it, et empile le résultat dans le DOM pour vous. Puis fermera cette vue et la nettoiera pour vous, à condition que votre vue ait une méthode de "fermeture".
MyApp.addRegions({
someRegion: "#some-div"
});
MyApp.someRegion.show(new MyView());
mais vous n'êtes pas obligé de utilisez les vues de la marionnette pour utiliser une région. La seule exigence est que vous vous étendez à partir de L'épine dorsale.Vue à un certain point dans la chaîne prototype de l'objet. Si vous choisissez de fournir une méthode close
, une méthode onShow
, ou d'autres, la région de Marionette l'appellera pour vous au bon moment.
- http://lostechies.com/derickbailey/2011/12/12/composite-js-apps-regions-and-region-managers/
- http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/
Aucun Serveur de Lock-in
je construis des applications Backbone / Marionette sur une grande variété de technologies de serveur:
- ASP.NET MVC
- Ruby on Rails
- Ruby / Sinatra
- NodeJS / ExpressJS
- PHP / Slim
- Java
- Erlang
- ... et plus
JavaScript JavaScript est-il, quand il s'agit de s'exécutant dans un navigateur. JavaScript côté serveur est génial, aussi, mais il a zéro effet ou d'influence sur la façon dont j'écris JavaScript basé sur mon navigateur.
en raison de la diversité des projets que j'ai construits et des technologies d'arrière-plan que mes clients utiliser, Je ne peux pas et ne veux pas verrouiller Marionette à une seule pile de technologie côté serveur pour quelque raison que ce soit. Je ne fournirai pas de projet de plate-forme. Je ne fournirai pas un rubis ou un paquet npm. Je veux que les gens comprennent que Marionette n'a pas besoin d'un serveur de back-end spécifique. C'est du JavaScript basé sur le navigateur, et la fin n'a pas d'importance.
bien sûr, je soutiens pleinement les autres personnes qui fournissent des paquets pour leur langue et leur cadre. J'ai listé ces paquets dans le Wiki et espérer que les gens continuent à construire plus de paquets quand ils en ont besoin. Mais c'est un soutien communautaire, pas un soutien direct de la part de la Marionnette.
Change Facilement Les Valeurs Par Défaut
dans mon effort pour réduire le code boilerplate et fournir par défaut sensible (qui est une idée que je directement "emprunté" au LayoutManager de Tim Branyen), je reconnais la nécessité pour les autres développeurs d'utiliser des implémentations légèrement différentes que moi.
je fournis le rendu basé sur inline <script>
tags pour les gabarits, en utilisant des underscores.js templating par défaut. Mais vous pouvez remplacer cela en changeant les objets Renderer
et/ou TempalteCache
en marionnette. Ces deux objets fournissent le noyau des capacités de rendu, et il y a des pages wiki qui montrent comment changer ceci pour des moteurs de templating spécifiques et différentes façons de charger des templates.
avec v0.9 de marionnette, ça devient encore plus facile. Par exemple, si vous voulez remplacer l'utilisation de blocs de script de template en ligne par des templates pré-compilés, vous n'avez qu'à remplacer une méthode sur le Renderer:
Backbone.Marionette.Renderer.render = function(template, data){
return template(data);
};
et maintenant l'application entière utilisera des gabarits pré-compilés que vous attacherez à l'attribut template
de votre vue.
je fournis même une marionnette.Add-on Async avec v0.9 cela vous permet de prendre en charge le rendu asynchrone des vues. Je m'efforce en permanence de rendre aussi facile que possible le remplacement des comportements par défaut dans Marionette.
Code Comme Configuration
je suis fan de" convention over configuration " dans certains contextes. C'est un moyen puissant de faire les choses, et de Marionnettes fournit un petit peu - mais pas trop, honnêtement. Beaucoup d'autres cadres - en particulier LayoutManager - offrent plus de conventions sur la configuration que Marionette ne le fait.
C'est fait avec un but et une intention.
j'ai construit assez de plugins JavaScript, cadres, add-ons et applications pour connaître la douleur d'essayer d'obtenir des conventions à travailler d'une manière significative et rapide. Cela peut être fait avec rapidité, mais généralement au prix de pouvoir le changer.
À cette fin, je prends un approche" code comme configuration " de la Marionnette. Je ne fournis pas beaucoup d'API de "configuration" où vous pouvez fournir un objet littéral avec des valeurs statiques qui changent un certain nombre de comportements. Au lieu de cela, je documente les méthodes que chaque objet a - à la fois par le code source annoté et par la documentation API réelle - avec l'intention de vous dire comment changer la marionnette pour travailler comme vous voulez.
en fournissant une API propre et claire pour les objets de marionnette, Je créer une situation où remplacer le comportement d'un objet spécifique ou D'une marionnette dans son ensemble est relativement simple et très flexible. Je sacrifie L'API de configuration "simple" pour la flexibilité de fournir votre propre code pour faire fonctionner les choses comme vous le souhaitez.
vous ne trouverez pas D'API" configure "ou" options " dans Marionette. Mais vous trouverez un grand nombre de méthodes qui chacun servent un but très spécifique, avec des signatures propres, qui le rendent facile à changer le fonctionnement de la Marionnette.
alors, ma réponse à votre question Est: commencez par utiliser l'épine dorsale telle quelle, et demandez-vous ce qui manque et quelles étaient vos attentes au sujet du cadre. Si vous trouvez qu'il y a trop de choses laissées par backbone, allez les chercher dans les autres cadres et choisissez celui qui est le plus près de vos besoins. Et si vous n'êtes toujours pas confiant dans le choix, peut-être que la colonne vertébrale n'est pas pour vous et vous devez regarder certains autre solution (de braise.js, sproutcore, ExtJs, JavaScript MVC sont tous bons). Si vous avez de l'expérience dans la rédaction d'applications client, vous n'avez pas vraiment besoin d'expérience sur tout le cadre là - bas pour choisir le bon (pour vous, bien sûr)
j'ai étudié les différents cadres construits avec L'épine dorsale.js et construit les vertèbres pour un projet à HauteLook. Les objectifs du projet inclus... le chargement dynamique de script, le format de module AMD, La gestion des dépendances, construire avec la plupart des bibliothèques open source, organiser le code dans les paquets, optimiser et construire pour une ou plusieurs applications de page unique, l'hôte sur le serveur entièrement caché, par exemple pas de scripting côté serveur en utilisant seulement une API pour les données, et le plus amusant pour moi, utiliser le développement axé sur le comportement pour le projet. Il y a une description sur le projet à: http://www.hautelooktech.com/2012/05/24/vertebrae-front-end-framework-built-with-backbone-js-and-requirejs-using-amd/
Notre Problème:
bibliothèques sélectionnées (jQuery, Underscore.js, de la colonne vertébrale.js, Requerjs, Moustache) fournissent le chargement de modules, la gestion de dépendances, la structure d'application (pour les modèles, les collections, les vues et les routes), asynchrone interactions avec L'API, divers utilitaires et objets pour gérer les comportements asynchrones, par exemple (promesses) Déférends, Callbacks. La logique restante nécessaire pour compléter le cadre comprend:
- un objet (model) pour la gestion de l'état de la seule page de l'application;
- un gestionnaire de mise en page pour présenter, organiser/transition et des vues claires, et
- contrôleurs qui répondent aux itinéraires, obtenir/définir l'état de l'application, et de la main travail à la disposition du gestionnaire.
Nos Solutions (mis en œuvre dans les Vertèbres):
L'État De L'Application "Gestionnaire De 1519240920" -
le gestionnaire d'application stocke les données dans la mémoire et les persiste dans le stockage du navigateur pour fournir une ressource pour les données/métadonnées communes. Fournit également des données (État) pour reconstruire les vues de page sur la base des interactions précédentes (par ex. filtrer.) Le gestionnaire d'état d'application fournit une stratégie pour les ressources pour récupérer l'état. Conçu pour agir comme une machine d'état.
Layout Manager -
le gestionnaire de mise en page a une ou plusieurs vues ainsi que des destinations de document (DOM) pour chaque vue (rendue). Une page peut passer entre plusieurs vues, de sorte que le gestionnaire de mise en page garde la trace des états de vue, par exemple rendus, non rendus, affichés, non affichés. Vous pouvez utiliser le mise en page du gestionnaire de charge paresseux et render (détaché) qu'un visiteur du site est très probablement à la demande, par exemple, l'onglet modifications sur une page. La transition entre les états de vue est gérée par cet objet. Une mise en page complète peut être effacée pour que les objets de vue et leurs reliures soient enlevés, préparant ces objets pour la collecte des ordures (empêchant les fuites de mémoire). Le gestionnaire de mise en page communique également l'état de la vue avec le(S) contrôleur (s).
Contrôleur -
un objet controller est appelé par une fonction de gestionnaire de routes, et est responsable d'obtenir l'état pertinent (modèles d'application) pour générer une page (layout), (également responsable de définir l'état lorsque les routes changent). Le contrôleur transmet les données dépendantes (modèles/collections) et construit des objets de vue pour une page demandée au gestionnaire de mise en page. Comme effet secondaire, l'utilisation de contrôleurs empêche l'objet routes de devenir gonflé et enchevêtré. Un itinéraire doit correspondre à un contrôleur qui démarre alors la vue de page, en gardant les fonctions de gestion de route lean.
L'application Todos est hébergée en mode dev et optimisée sur Heroku...
bon nombre des concepts des autres cadres sont empruntés, par exemple: le besoin de détruire les vues pour prévisualiser les fuites de mémoire comme L'a souligné Derick Bailey - http://lostechies.com/derickbailey / ; the Layout Manager de Tim Branyen http://tbranyen.github.com/backbone.layoutmanager/
en résumé, colonne vertébrale.js est destiné à être un outil dans votre application la colonne vertébrale.la bibliothèque js ne fournit pas toute l'architecture dont vous aurez besoin pour construire une application, mais fournit de grandes interactions avec un API et structure de code solide pour... Les vues (agir comme des contrôleurs aussi) et vos modèles et Collections de couches de données, et enfin les Routes. Nous avons construit des vertèbres pour réaliser les objectifs de notre projet, et avons décidé d'extraire le code comme un cadre pour les autres à utiliser, apprendre, ou n'importe quoi.
la réponse à votre question à mon avis est d'apprendre de tous les cadres et d'utiliser ce dont vous avez besoin pour atteindre vos objectifs, si vous trouvez que vos objectifs de projet correspondent étroitement à l'un des cadres construit avec L'épine dorsale puis grande, sinon construit votre propre cadre il ya de grands exemples qui sont partagés par la communauté. Ou si vous vous trouvez un peu perdu dans la direction de votre application, alors choisissez quelque chose de plus opiniâtre et structuré peut-être Ember.js. La grande chose est qu'il ya un bon assortiment de choix pour vous aider à coder en utilisant un (MVX) MVC comme motif avec JavaScript.
j'ai développé le Luca framework tout en travaillant à BenchPrep où nous l'avons utilisé pour développer plusieurs grandes applications d'une page sur le dessus de la colonne vertébrale.bibliothèque js.
j'avais travaillé avec ExtJS pendant plusieurs années avant et j'ai volé mes concepts préférés de ce cadre tel que l'architecture pilotée par Composants où vous développez vos vues en tant que composants autonomes et puis les joindre avec d'autres composants en utilisant des vues de conteneur. Et comme il est fortement basé sur la configuration, développer une application dans Luca ressemble beaucoup à décrire un objet avec JSON.
L'un des avantages de cette approche est la possibilité de réutiliser des composants à travers plusieurs applications ou à différents endroits de votre application, avec seulement des modifications mineures en utilisant l'extension de Backbone. Il est également très facile d'expérimenter de nombreuses mises en page / présentations différentes de composants en ne faisant que des retouches mineures à la configuration JSON.
en plus d'une large gamme de fonctions d'aide / utilitaire, Luca propose de nombreux dérivés de base de niveau supérieur que vous pouvez assembler de n'importe quelle manière imaginable pour construire une interface utilisateur complexe.
Vues, Composants, Conteneurs
- Augmentée Modèle, la Vue, la Collecte, le Routeur classes
- Options de Configuration qui facilitent la communication entre les modèles, les Collections, les vues, le Application et ses gestionnaires respectifs.
- Conteneurs ( Split / Mise En Page En Colonnes, Grille De Mise En Page, Onglet Affichage, La Carte De L'Assistant De Vue )
- FormView avec tous les composants de terrain standard, et les assistants pour la synchronisation avec une colonne vertébrale.Modèle
- GridView, pour la génération de grille de défilement des éléments à partir d'un Luca.Collection
- CollectionView, pour générer des vues basées sur une collection de
- Barres D'Outils / Boutons
Twitter Bootstrap Styles et de Balisage Pour Gratuit
- Luca joue très bien avec le bootstrap framework Twitter. Tout simplement en plaçant Luca.enablbootstrap = true, et en incluant le CSS, vos composants ( tels que les vues d'onglets, les barres d'outils, les boutons, les formulaires, les champs, les grilles, etc. ) utiliseront automatiquement les conventions de classe CSS et de markup compatibles Twitter Bootstrap.
- utilise le système de grille pour la mise en page, et répond à la plupart des classes CSS de base bootstrap d'une manière intelligente
- Luca.Les composants de Viewport et GridLayout sont configurés pour fonctionner avec les systèmes de réseau réactifs, fluides ou statiques de bootstrap.
- vise à fournir un à un match pour les composants bootstrap twitter, pour les représenter comme des vues épine dorsale configurables
Des Composants De L'Application
- colonne vertébrale.Modèle de l'état de l'appareil permet de getter / setter et la modification de l'attribut d'événements comme un style de contrôle de l'application de flux
- composant de contrôleur intégré qui cache / montre les pages de l'application en réponse à la colonne vertébrale.Événements routeur ou machine D'État
- Gestionnaire de collections intégré qui garde trace des collections que vous avez créées, vous permet de les examiner, les grouper, assigner les paramètres par défaut
- un gestionnaire de Socket qui est une couche d'abstraction au-dessus des services websocket qui rend push aussi facile que L'épine dorsale.Événement
- un routeur D'événements clavier qui déclenche des événements clés nommés sur les composants qui prennent soin de répondre à de tels événements
Collection et améliorations de Modèles
- Collections sont basées sur des épine dorsale-requête , qui fournit une interface de requête très similaire à mongoDb
- permet un stockage local de base.synchroniser simplement en réglant collection.localStorage = true "1519150920 automatique" de la population de collections dont les données est amorcé au chargement de la page
- méthodes mises en cache / propriétés calculées. cache le résultat des méthodes de collecte, et expire le cache en réponse au changement / Ajouter / Supprimer des événements sur la collecte ou ses modèles
- propriétés calculées sur les modèles. construire des attributs basés sur une fonction complexe, et mettre à jour automatiquement la valeur calculée en réponse aux changements
les Événements et les Crochets
Luca composants sont plus libéraux, les événements qu'ils émettent par rapport au stock épine Dorsale des composants. Ils émettent des événements comme avant:initialiser, après:initialiser, avant d':render, après:le rendu, activation:l'activation, la désactivation, la première:la désactivation, et cela vous permet de régler finement le comportement de vos composants. De plus, en définissant un événement dans la porperty @hooks sur votre vue, il appellera automatiquement une fonction du même nom pour vous si elle existe. Cela empêche beaucoup de code de style de callback qui améliore la lisibilité.
vous pouvez également configurer le Luca.La classe d'événements pour publier les événements sur un canal mondial de publication / abonnement, qui fait construire une grande application plus facile et facilite la communication entre les modules.
Le Rubis Gemme
Luca a été développé spécifiquement tout en travaillant contre les rails et Sinatra APIs et pour cette raison est actuellement optimisé pour une pile spécifique, mais il ne vous bloque en aucune façon dans un serveur spécifique.
Luca vient distribué dans le cadre d'un rubis Gem configuré pour travailler sur le pipeline de l'actif, ou comme un téléchargeable Js file.
vous n'êtes pas tenu d'utiliser les Rails, ou Sinatra. Mais si vous le faites, j'ai compris beaucoup de choses utiles:
- Fichiers avec l' .l'extension luca est traitée comme HAML avec une interpolation variable de style JST. ( l'équivalent d' .jst.ejs.haml ) par l'asset pipeline
- un harnais de Test pour le navigateur, ou des tests D'unité sans tête à base de jasmin ainsi que de nombreuses aides de test de L'épine dorsale et de Underscore.
- Une API de point de terminaison pour l'ensemble d'outils de développement qui est livré avec Luca ( plus sur cela plus tard )
- un terminal API qui vous permet d'utiliser Redis comme un moteur de stockage sans schéma pour Luca.Collection avec une configuration minimale
Outils De Développement
- Luca applications peuvent permettre à un dans le navigateur coffeescript console avec Luca spécifiques d'aides et de commandes que l'aide dans la surveillance, l'inspection, le débogage des applications Luca et des composants
-
avec L'aide du rail Gem, et de L'éditeur de composants basé sur CodeMirror De Luca, vous pouvez éditer le code source du cadre Luca ainsi que les composants spécifiques à l'application directement dans le navigateur, en utilisant Coffeescript. Vous verrez des réactions immédiates en réponse à vos modifications, avec les cas de les objets affectés étant rafraîchis avec le prototype mis à jour, et vous pouvez enregistrer vos modifications sur le disque.
-
le testeur de composants est un bac à sable vivant pour jouer avec les composants qui composent votre application en isolation. Il vous fournit des outils pour modifier le prototype du composant, configurer ses dépendances et configurer le composant. Le component va se re-rendre immédiatement à chaque fois que vous faites une édition. Vous pouvez voir et éditer le balisage que le composant génère, ainsi que le CSS directement dans le navigateur et de voir vos modifications immédiatement. Cela en fait un outil d'expérimentation très précieux.
-
le testeur de composants va bientôt s'intégrer avec Jasmine afin que vous puissiez voir les résultats de vos tests unitaires de composants en temps réel que vous éditez leur code
Luca est un travail en progress, mais maintient une API stable (pas encore 1.0) et a été utilisé dans plusieurs grandes applications de production. C'est certainement un cadre très opiniâtre, mais je travaille à le rendre plus modulaire. Je travaille activement sur la documentation et les échantillons.
je suis co-auteur de Chaplin et j'ai écrit une comparaison approfondie entre Chaplin.js et Marionette.js:
http://9elements.com/io/index.php/comparison-of-marionette-and-chaplin /
ce n'est pas une" fusillade " mais tente d'expliquer les deux approches d'une manière équilibrée.