Comment générer l'id de modèle avec Backbone.js
Je suis en train d'ouvrir la colonne vertébrale mécanisme de synchronisation et je suis un peu confus où générer l'id est pour les modèles.
Quand je crée un nouveau modèle, devrait épine dorsale de créer et de réglage de l'id, ou suis-je censé mettre en œuvre une génération d'id de méthode, ou est-il une sorte de mécanisme où j'ai MIS "" les données sur le serveur, ce qui génère l'id et retourne un modèle avec l'id?
- Vous (mai) manuellement l'attribuer. Fédérateur en interne attribue un
cid
de l'élément de modèle que a pas été enregistré sur le serveur. Une fois enregistré, vous retournez unid
de l'élément fédérateur utilise pour attribuer à votre modèle. Voir les docs (backbonejs.org/#Model-id) ou @orangewrap belle réponse 🙂
Vous devez vous connecter pour publier un commentaire.
Sorte de. Lorsque vous appelez la méthode d'enregistrement de votre modèle, de la colonne vertébrale faire un POST XHR et votre serveur d'application doit répondre avec JSON contient un id.
Vous pouvez voir un exemple ici: http://addyosmani.com/blog/building-backbone-js-apps-with-ruby-sinatra-mongodb-and-haml/
En citant le lien:
Si vous ne savez pas Ruby garder à l'esprit ce que la dernière expression évaluée est automatiquement retournée par la méthode.
Je suis fournissant une seconde réponse à simplifier le code, vous devez étudier pour obtenir les points principaux que vous êtes à réfléchir sur la réelle autour d'un modèle à l'server et comment les id de jouer leur rôle.
Vous dire définir un modèle - allons-y avec Jurassic Park.
Vous avez maintenant instancier un dinosaure qui est un mangeur de viande. Rugissement.
Ce que vous devriez remarquer, c'est que dans les propriétés de tRex, votre modèle ne dispose pas d'un id. Au lieu de cela, vous verrez un cID que vous pouvez considérer comme une identité temporaire qui épine Dorsale attribue automatiquement à vos modèles. Lorsqu'un modèle n'a pas un id, il est considéré comme nouveau. Le concept de la persistance d'un modèle (soit à une base de données ou de stockage local) est ce qui permet de revenir à cette ressource après que vous avez créé, il et faire des choses comme save (MIS) ou de détruire (SUPPRIMER). Il serait difficile de trouver cette ressource si vous n'avait aucun moyen de pointer directement à refaire! Afin de trouver cette ressource, votre modèle a besoin d'un id, quelque chose qu'il ne dispose pas actuellement.
De sorte que les réponses ci-dessus ont expliqué, c'est le travail de votre base de données (ou localstorage, ou une autre solution) pour fournir de la colonne vertébrale avec un id de ressource. La plupart du temps, cela vient de l'id de la ressource elle-même, aka - la clé primaire id de votre modèle dans un tableau.
Avec ma configuration, j'utilise PHP et mySQL. Je voudrais avoir une table appelée Dinosaure et chaque ligne doit être une représentation persistante de mon dino modèle. Alors j'aimerais avoir une colonne d'id (unique auto-incrémentation int), et cavemanEater (bool).
Les données de flux de communication se fait comme ceci.
Voici ce que annoté à quoi ressemble le code.
CLIENT:
SERVEUR:
CLIENT:
Maintenant votre tRex a un id = 1. Ou devrais-je dire...
Félicitations. Si vous faites cela
tRex.isNew()
il retournera false.Épine dorsale est intelligent. Il sait de publier de nouveaux modèles et de METTRE les modèles qui ont déjà un id de ressource.
La prochaine fois que vous faites cela:
Épine dorsale va faire une demande à l'adresse URL suivante.
http://www.example.com/dino/1
Qui est le comportement par défaut par le chemin. Mais ce que vous remarquerez est que l'URL est différente de celle de l'enregistrer. Sur le serveur vous avez besoin d'une route qui accepte /dino/:id, par opposition à /dino
Il va utiliser l' /urlRoot/:id de modèle de route pour vos modèles par défaut, sauf si vous tordre le contraire.
Malheureusement les dinosaures ont disparu.
Cela appel... Pouvez-vous deviner? Yep. Demande de SUPPRESSION de /dino/1.
Votre serveur doit distinguer entre les différentes demandes d'itinéraires différents, afin de base de travail. Il existe plusieurs technologies de serveur qui peut faire cela.
Quelqu'un a mentionné Sinatra si vous êtes à l'aide de Ruby. Comme je l'ai dit, j'utilise le PHP et j'utilise SLIM Framework PHP. Il est inspiré par Sinatra similaire donc et je l'aime. L'auteur écrit certains de code propre. Comment ces Reposant implémentations de serveur de travail est à l'extérieur de la portée de ce débat bien.
Je pense que c'est la base de voyage complet de la nouvelle colonne vertébrale de données sans id, à travers les internets à votre serveur où il génère et renvoie l'id de la ressource, pour faire de votre modèle de vivre heureux pour toujours. (Ou
destroy()
pas...)Je ne sais pas si c'est trop débutant pour vous, mais j'espère que ça aidera quelqu'un d'autre qui s'exécute ce problème. La dorsale est vraiment amusant de programme.
D'autres Réponses semblables:
Façons d'économiser de l'Backbone JS modèle de données
someModel.set('id',777);
mais pourquoi vous voulez faire, c'est au delà de moi. 🙂???.id =
dans le code source, mais je ne le trouve pas. Toute aide?idAttribute
Ce pourrait également être le long des lignes de ce que je pense que vous êtes après... Juste deviner si. LIEN: idAttribute.save()
et.destroy()
ressources spécifiques qui ne peuvent pas être identifiés de façon unique. Vous pouvez définir l'id du client... il suffit de nemodel.set('id','someID')
mais le problème est que si vous avez plusieurs clients - comment êtes-vous assurer de l'unicité? Puis à la fin, le serveur a encore de recherche dans la base de données et de valider. Dans ce cas, n'est-il pas beaucoup plus facile juste pour en avoir le DB d'attribuer automatiquement un id unique? 🙂 Je ne suis pas sûr de détails précis, mais peut-être que ce scénario justifie une nouvelle question?id
attribut, et la définition de cette identificateur unique à l'id à l'aide deidAttribute
; je crois que c'était la pièce manquante de mon puzzle.idAttribute
à n'importe quel domaine que vous souhaitez. Assurez-vous simplement que c'est votre base de données de paramètre id unique automatiquement pour garantir l'unicité. Si vous affectez cette id via client, vous devez vous assurer que l'id est unique, ou vous aurez une journée terrible quand, par accident, - une ressource est identifiée comme ayant un id qui existe déjà dans votre base de données... et puis tous vos.save()
appels remplacer ce que vous n'avez pas l'intention de le remplacer. 😉Ce que je comprends de votre question, c'est que vous voulez avoir une collection avec des modèles qui existent sur le serveur. Afin d'obtenir ces modèles dans la collection, vous devez ajouter un appel 'fetch ()" sur la collection.
L'url serait "/users" ou quelque chose de similaire, qui aurait pour retourner un tableau d'objets avec les données de l'utilisateur dans il. Chaque élément d'un tableau serait alors transmis à UserCollection.add(). Eh bien, en fait, il serait passé tout à la fois, mais vous obtenez le point.
Après cela, votre collection est remplie. L'url sur le Modèle est destiné à la mise à jour et l'enregistrement de chaque modèle. L'url de la collection sera également utilisé pour la création de modèles. Épine dorsale de synchronisation est Reposant, comme Ruby on Rails. Vous pouvez réellement apprendre plus à ce sujet sur la documentation de Ruby on Rails:
http://guides.rubyonrails.org/routing.html
Ce que vous voulez généralement à faire est d'avoir une url différente pour votre modèle de votre contrôleur. Après le remplissage de votre collection, vous avez l'identifiant de chaque modèle là parce qu'ils sont venus à partir du serveur.
Maintenant, lorsque vous ajoutez un nouveau modèle basé sur la saisie de l'utilisateur, vous feriez quelque chose comme ceci:
L'exemple de quelqu'un d'autre question j'ai répondu, j'ai juste ajouter des choses.
L'idée générale est de sauver le modèle lorsqu'il est créé, si vous avez besoin de quelque part d'autre, vous pouvez tout simplement passer le code en fonction du modèle et de l'appel que sur la base d'événements ou quoi que ce soit d'autre.