Pour les six derniers mois, j'ai travaillé avec la colonne vertébrale. Les deux premiers mois ont été de déconner, de l'apprentissage et de comprendre comment je veux la structure de mon code autour d'elle. Les 4 prochains mois, ont été pilonnant de production-ajustement de l'application. Ne m'obtenez pas le mal, de la colonne vertébrale m'a sauvé de milliers de lignes de gâchis de code côté client qui ont été la norme avant, mais il m'a permis de ne plus grandioses de choses en moins de temps, l'ouverture d'une nouvelle pile de problèmes. Pour toutes les questions que je soulève ici, il existe des solutions simples qui se sent comme hacks ou juste se sentir mal. Je promets de 300 points de bounty pour passer une excellente solution. Va ici:
- Chargement - Pour notre cas d'utilisation (un panneau d'administration) pessimiste de la synchronisation est mauvais. Pour certaines choses, j'ai besoin de valider des choses sur le serveur avant de les accepter. Nous avons commencé avant le "sync" de l'événement a été fusionnée dans la colonne vertébrale,
et nous avons utilisé ce petit code pour imiter le chargement de l'événement:
window.old_sync = Backbone.sync
# Add a loading event to backbone.sync
Backbone.sync = (method, model, options) ->
old_sync(method, model, options)
model.trigger("loading")
Grand. Il fonctionne comme prévu, mais il ne semble pas correcte. Nous lier cet événement à tous les points de vue pertinents et d'afficher une icône de chargement jusqu'à ce que nous recevons une erreur ou de réussite de l'événement à partir de ce modèle. Est-il un meilleur, plus sain, façon de le faire?
Maintenant, pour les difficiles:
- Trop de choses se rendent trop , disons à notre demande, des onglets. Chaque onglet contrôle d'une collection. Sur le côté gauche, vous obtenez la collection. Vous cliquez sur un modèle pour commencer à le modifier au centre. Vous de changer son nom et appuyez sur la touche tab pour accéder au prochain élément de formulaire. Maintenant, votre application est un "temps réel quelque chose de quelque chose" que les avis de la différence, exécute les validations, et de synchroniser automatiquement les changements sur le serveur, pas de bouton enregistrer nécessaire! Grande, mais le H2 au début du formulaire est le même nom que dans l'entrée, vous devez le mettre à jour. Oh, et vous avez besoin de mettre à jour le nom de la liste sur le côté. OH, et la liste s'organise par les noms!
Voici un autre exemple: Vous voulez créer un nouvel élément dans la collection. Vous appuyez sur le bouton "nouveau" et vous commencer à remplir le formulaire. Avez-vous immédiatement ajouter l'élément à la collection? Mais qu'advient-il si vous avez décidé de la jeter? Ou si vous enregistrez l'ensemble de la collection sur un autre onglet? Et, il y a un upload de fichier - Vous besoin d'enregistrer et de synchroniser le modèle avant de pouvoir commencer à télécharger le fichier (de sorte que vous pouvez attacher le fichier du modèle). Donc, tout commence rendu dans les tremblements: Vous enregistrez le modèle et la liste et la forme se rend de nouveau - c'est maintenant synchronisés, de sorte que vous obtenez un nouveau bouton supprimer, et il montre dans la liste - mais maintenant, le téléchargement de fichier téléchargement terminé, de sorte que tout commence un nouveau rendu.
Ajouter des sous-vues pour le mix et tout commence à ressembler à un film de Fellini.
C'est des sous-vues tout le chemin vers le bas - Voici un bon article sur ce genre de choses. Je ne pouvais pas, pour l'amour de tout ce qui est saint, trouver une bonne façon de joindre les plugins jQuery ou d'événements DOM à tout point de vue qui a des sous-vues. L'enfer s'ensuit rapidement. Les info-bulles entendre un rendu venir une longue et commencez à paniquer autour, des sous-vues deviennent comme des zombies ou ne répondent pas. C'est les principaux points de la douleur comme ici réelle de bugs, mais je n'ai pas encore globale de la solution.
Le scintillement - Rendu est rapide. En fait, il est tellement rapide que mon écran ressemble, il a eu une crise. Parfois, il est des images qui a pour charger à nouveau (avec un autre serveur à l'appel!), si le html est réduit et puis maximise nouveau brusquement et un css largeur+hauteur de l'élément va résoudre ce problème. parfois, nous pouvons le résoudre avec un fadeIn et fadeOut - qui sont une douleur dans le cul à écrire, car nous sommes parfois la réutilisation d'une vue et parfois la création de nouveau.
TL;DR - je vais avoir des problèmes avec les vues et les sous-vues de la colonne vertébrale - Il rend une fois de trop, il clignote quand il rend, sous-vues détacher mon DOM événements et manger mon cerveau.
Merci!!!!
Plus de détails: BackboneJS avec le framework Ruby on Rails Gem. Des modèles à l'aide UnderscoreJS modèles.