35 votes

Comment définir l'URL d'une collection

disons que j'ai:

 var Book = Backbone.Model.extend();

var Collection = Backbone.Collection.extend({
  model: Book,
  url: '/books',
  initialize: function(){
    this.fetch();
  })
})
 

Comment puis-je changer le Collection du url lors de l'instanciation d'une nouvelle collection?

var AdventureBooks = new Books({ url: '/books/adventure' }) ne fonctionne pas

 var AdventureBooks = new Books({ category: 'adventure' })
 

et dans la définition de Collection:

url : '/books/' + this.category ne fonctionne pas non plus.

Merci.

39voto

ponzao Points 7907

Les éléments suivants devraient fonctionner:

 var AdventureBooks = new Books();
AdventureBooks.url = '/books/adventure';
 

28voto

Raynos Points 82706
var Book = Backbone.Model.extend({
  "url": function() {
    return '/books/' + this.get("category");
  }
});

13voto

Juha Palomäki Points 7216

Pour une raison quelconque, les paramètres passés au constructeur Collection (par exemple "url") ne sont pas définis sur l'objet. La collection n'en utilise que peu (modèle et comparateur).

Si vous souhaitez passer l'URL via le constructeur, vous devez créer une méthode d'initialisation qui copie les paramètres nécessaires dans l'objet:

 var Book = Backbone.Model.extend({
    initialize: function(props) { 
        this.url = props.url;
    }
}
var book = new Book({url: "/books/all"});
 

9voto

Ruy Diaz Points 1447

Comme Daniel Patz a souligné , le problème réside dans la façon dont vous êtes l'instanciation de la collection. J'ai juste eu du mal avec ce pour un peu, donc je pensais que je mettrais à jour ce, même si la question est un peu vieux.

Le premier argument est censé être un choix de modèles, avec les options à venir après. Cela devrait fonctionner:

var AdventureBooks = new Books([], { url: '/books/adventure' })

Si vous voulez une URL dynamique, puis Raynos' réponse pourrait être le chemin à parcourir.

1voto

ckot Points 35

Je sais que cette réponse tardive, mais j'ai eu un semblable bien que légèrement plus compliqué la situation, et la réponse choisie n'a pas vraiment m'aider.

J'ai une des Conditions de la collecte, et chaque Expérience modèle a plusieurs conditions, et j'ai besoin de mon url /api/expériences/:experimentId/conditions, mais je ne sais pas comment accéder à la experimentId de la vide des Conditions de collecte.

Dans mes Conditions url de la collection de la fonction, j'ai fait une console.journal(ce.la méthode toJSON()) et découvert que l'épine Dorsale insère un seul mannequin modèle dans le vide de la collection avec ce que les attributs que vous avez passé dans, au moment de la création.

donc:

var Conditions = new ConditionsCollection({
  experimentId: 1
});

J'ai quelque doute que ce serait considéré comme une meilleure pratique, j'espère que quelqu'un d'autre va répondre avec une meilleure solution, mais voici comment je définis ma Collection:

var ConditionsCollection = Backbone.Collection.extend({
  model: Condition,
  url:  function(){
    var experimentId = this.at(0).get("experimentId");
    return "/api/experiments/" + experimentId + "/conditions";
  }
});

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