2012-06-15 2 views
0

Je suis nouveau sur le backbone et j'essaie ma première application après avoir parcouru quelques applications tutorielles.Backbone.js restes de routes personnalisées

Je me demandais quelle est la meilleure façon d'atteindre les objectifs suivants

Sur le back-end (rails)

J'ai un nom de modèle d'affaires, il est un modèle complexe avec beaucoup d'attributs, il a une adresse associée (has_one :address) et a un avatar et un autre profil pitcure et beaucoup plus. De mon interface, je veux être en mesure d'extraire et de mettre à jour des parties spécifiques du profil de l'entreprise, Disons que je veux seulement aller chercher le basic_info qui inclut le nom, la catégorie et l'adresse que je veux pouvoir mettre à jour l'image de profil et l'avatar.

Ce que j'ai vu dans le squelette est que le modèle a les méthodes sauvegarder, mettre à jour, chercher, détruire

Et si je veux avoir d'autres méthodes comme fetch_basic_info, fetch_profile_picture, update_profile_picture? et contre ceux-ci je veux que les vues associées soient notifiées en conséquence.

Voici ce que je suis venu avec

Disons que je veux aller chercher l'information de base

  • ajouter une fonction fetch_basci_info au modèle fédérateur

    • dans cette fonction envoyer un requête ajax personnalisée utilisant $.ajax au serveur
    • déclencher manuellement l'événement "basicinfo:fetched"
  • dans ma fonction routeur

    • créer un objet modèle
    • créer une nouvelle vue permet de dire BasicInfoView et le transmettre l'objet modèle
    • dans la vue liez un même du modèle permet dire model.bind('basicinfo:fetched', this.render)
    • lorsque le routeur est initialisé, appelez model.fetch_basic_info (dans le routeur init)

Ainsi, le routeur est appelé il crée vue lie un événement personnalisé et appelle la demande model.fetch_basic_info() est envoyée à la réponse du serveur est retourné (dois-je appeler régler manuellement pour définir les attributs du modèle de colonne vertébrale ici). Après que l'événement d'événement personnalisé est déclenché, la vue est notifiée et elle se rend elle

Ceci est ma première vraie application de backbone donc si je fais quelque chose vraiment à l'écart, arrêtez-moi.

Que pensez-vous de cela?

Merci d'avoir lu et feedbcak.

Répondre

0

Si vous essayez de le faire pour économiser des ressources ou de la bande passante réseau, il est presque certainement une optimisation prématurée - à moins que nous parlons de centaines ou de milliers de champs - dans ce cas, il existe une meilleure solution. La vérité est, Récupérer juste une image de profil utilise à peu près les mêmes ressources que la récupération de 50-100 champs. Oui un peu plus de données, mais compte tenu de 90% du travail, la latence, les ressources et le temps d'attente dans une connexion réseau proviennent de l'établissement de la connexion que vous n'économisez pas vraiment.

plus sur la fin de la base de données, un

select * from businesses where id=123

utilise seulement un tout petit peu plus que

select profilepic from businesses where id=123

depuis la partie la plus difficile du travail consiste à établir une connexion à la base de données et trouver la bonne rangée. Après cela, c'est juste un peu plus de données - l'ajout de 50 colonnes supplémentaires aura un effet imperceptible sur les performances.

La seule fois où cela tombe est si votre modèle/table contient des centaines ou des milliers d'attributs. Dans ce cas, la solution consiste à diviser votre modèle en sous-modèles. Et traiter avec eux individuellement via REST. Mais ils devraient être des types de logique métier. Par exemple Business contient Address, Employee, ShareStructure.

J'étais moi-même un optimiseur prématuré ... "Je ne dois pas retourner 10 colonnes quand j'ai seulement besoin d'une colonne". Mais si vous essayez d'écrire des API de service Web pour chaque sous-ensemble de données dans ses diverses combinaisons dont vous pourriez avoir besoin, votre API sera pratiquement inutilisable et inutilisable. Vous n'obtiendrez jamais de travail.

que vous vouliez obtenir la photo de profil de CocaCola hors API facebook, vous suffit d'appeler:

https://graph.facebook.com/cocacola

et obtenir le Photo propriété. Qui se soucie si vous n'avez pas besoin du reste des données? Il garde les choses simples, reposantes et faciles à entretenir.

0

Mon premier réflexe est de reproduire une grande partie des fonctionnalités déjà fournies par backbone. Je ne vois aucune raison pour laquelle vous devez répliquer exactement votre Business model côté client. Pourquoi ne pas répartir vos informations de base, votre profil, etc. dans des modèles Backbone séparés et les appliquer à vos vues si nécessaire. Ce que vous essayez de faire n'est pas très RESTful.

+0

tomber en panne est une bonne idée, mais ne vais-je pas écrire mon backend pour soutenir ces modèles? – Abid

+0

Pas plus qu'avec votre approche, je pense. Comment alliez-vous gérer vos méthodes de recherche séparées, etc. fetch_basic_info, fetch_profile_picture – lecstor

+0

Considérer @ reach4thelasers aussi. Si vous pouvez avoir un seul modèle et que chacun de vos points de vue peut modifier tout ce dont il a besoin et le sauvegarder, les choses seront beaucoup plus simples à la fois dans le client et dans le backend. Vous pouvez toujours optimiser plus tard si vous avez la chance d'en avoir besoin. – lecstor

Questions connexes