93 votes

Comment puis-je récupérer un modèle unique dans Backbone?

J'ai un Clock modèle de la colonne vertébrale:

var Clock = Backbone.Model.extend({});

Je vais essayer d'obtenir une instance de même que les informations les plus récentes à partir de /clocks/123. Certaines choses que j'ai essayé:

une "classe"méthode de niveau

Clock.fetch(123)
// TypeError: Object function (){ ... } has no method 'fetch'

la création d'une instance, puis en appelant fetch sur:

c = new Clock({id: 123})
c.fetch()
// Error: A 'url' property or function must be specified

une collection

J'ai essayé de créer un AllClocks de la collecte de ressources (même si je n'ai pas besoin d'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 puis-je obtenir juste une API adossés à de l'Horloge?

137voto

Hernan Points 1627

Essayez de spécifier urlRoot dans le modèle:

De la docs:

 var Book = Backbone.Model.extend({urlRoot : '/books'});
var solaris = new Book({id: "1083-lem-solaris"});
solaris.fetch();
 

26voto

makevoid Points 1921

Personnellement, je recommande, suivant le Modèle#url de documentation de la méthode

model = new Model(id: 1)
view = new View(model: model) 
collection = new Collection([model])
model.fetch()

dans votre collection, n'oubliez pas d'ajouter l'url de la collection:

url: "/models"

et à votre avis, est d'initialiser la fonction:

this.model.bind("change", this.render)

de cette façon, épine dorsale va faire une requête ajax à l'aide de l'url suivante:

"/models/1"

votre modèle sera mis à jour et le point de vue du rendu, sans modification de Collection#url ou Modèle#urlRoot

note: désolé, cet exemple est venu à café de script, mais vous pouvez facilement traduire js ajoutant var états

26voto

Andrew De Andrade Points 1576

Votre deuxième approche est celle que j'ai utilisée. Essayez d’ajouter ce qui suit à votre modèle Clock:

 url : function() {
  var base = 'clocks';
  if (this.isNew()) return base;
  return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
},
 

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.

12voto

Ankit Garg Points 324
 var Person = Backbone.Model.extend({urlRoot : '/person/details'});
var myName = new Person({id: "12345"});
myName.fetch();
 

Par conséquent, vous faites une demande Ajax sur le

 URL http://[domainName]/person/details/id 
 

et vous avez la réponse JSON de retour.

Enjoiiii !!!

0voto

4m1r Points 512

... et faites ceci si vous ne voulez pas la barre oblique finale sur le modèle urlRoot:

     url : function() {                        
        return this.urlRoot + this.id;
    },
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X