J'ai un Clock
modèle dans Backbone:
var Clock = Backbone.Model.extend({});
J'essaie d'obtenir un exemple de cela qui contient les dernières informations /clocks/123
. Certaines choses que j'ai essayées:
une méthode de niveau "classe"
Clock.fetch(123)
// TypeError: Object function (){ ... } has no method 'fetch'
créer une instance puis l'appeler fetch
:
c = new Clock({id: 123})
c.fetch()
// Error: A 'url' property or function must be specified
une collection
J'ai essayé de créer une AllClocks
ressource de collection (même si je n'ai aucune utilité pour une telle chose sur la page):
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
allClocks.fetch(123);
// returns everything from /clocks/
Comment obtenir une seule horloge basée sur l' API?
javascript
model-view-controller
rest
backbone.js
James A. Rosen
la source
la source
Réponses:
Votre deuxième approche est celle que j'ai utilisée. Essayez d'ajouter ce qui suit à votre modèle d'horloge:
Cette approche suppose que vous avez implémenté des contrôleurs avec le hashbang dans votre URL comme ceci, http://www.mydomain.com/#clocks/123 , mais cela devrait fonctionner même si vous ne l'avez pas encore fait.
la source
[collection.url]/[id]
.Essayez de spécifier urlRoot dans le modèle:
À partir de la documentation:
la source
currentBook.set('id', 13423, {silent:true})
. Cela fonctionne aussi, mais je ne sais pas pourquoi:currentBook.id = 13423
model.id
est essentiellement synonyme demodel.attributes.id
. Si vous appelezmodel.set('id')
, Backbone définitmodel.id
ce que vous avez spécifié. Etmodel.id
c'est ce qui est utilisé lors de la création de l'URL spécifique au modèle.Je recommande personnellement, en suivant la documentation de la méthode Model # url
dans votre collection, n'oubliez pas d'ajouter l'url de la collection:
et dans la fonction d'initialisation de votre vue, faites:
de cette façon, backbone fera une requête ajax en utilisant cette URL:
votre modèle sera mis à jour et la vue sera rendue, sans modifier Collection # url ou Model # urlRoot
Remarque: désolé, cet exemple est sorti dans le script coffee, mais vous pouvez facilement le traduire en js en ajoutant des instructions var
la source
{}
à l'intérieur des()
's pour les objets passés et en option et à;
la fin des lignesEn conséquence, vous faites une demande Ajax sur le
et vous avez la réponse JSON de retour.
Enjoiiii !!!
la source
... et faites-le si vous ne voulez pas la barre oblique de fin sur le modèle urlRoot:
la source
Vous devriez probablement accéder à l'objet via une collection et le conserver tout le temps dans la collection. Voici comment faire:
la source
Je veux utiliser l'URL RESTful, mais je ne comprends pas pourquoi «postId» ne peut pas être ajouté à l'URL de base.
Ensuite, je sais seulement après avoir défini 'idAttribute' comme 'postId' dans Model que je peux obtenir la bonne URL. comme ça:
la source