Les collections Backbone.js n'invoquent pas l'événement «réinitialiser» après l'opération de récupération

StackOverflow https://stackoverflow.com/questions/9389101

Question

Lors de la demande de data.json Fichier pour peupler la collecte qui a des données ci-dessous

[{
    "Id": "BVwi1",
    "Name": "Bag It",
    "AverageRating": 4.6,
    "ReleaseYear": 2010,
    "Url": "http://www.netflix.com/Movie/Bag_It/70153545",
    "Rating": "NR"
}, {
    "Id": "BW1Ss",
    "Name": "Lost Boy: The Next Chapter",
    "AverageRating": 4.6,
    "ReleaseYear": 2009,
    "Url": "http://www.netflix.com/Movie/Lost_Boy_The_Next_Chapter/70171826",
    "Rating": "NR"
}]

La collection n'invoque pas l'événement "réinitialiser" comme la documentation le dit. Je peux afficher la demande et la réponse sont correctes après la méthode Fetch mais rien ne se passe. Vous trouverez ci-dessous le code de mon application. Routeur qui commence est tout

Theater.Router = Backbone.Router.extend({
    routes: {
        "": "defaultRoute"
    },

    defaultRoute: function () {
        Theater.movies = new Theater.Collections.Movies()
        new Theater.Views.Movies({
            collection: Theater.movies
        });
        Theater.movies.fetch();
    }
})
var appRouter = new Theater.Router();
Backbone.history.start();

la collection

Theater.Collections.Movies = Backbone.Collection.extend({
    model: Theater.Models.Movie,
    url: "scripts/data/data.json",
    initialize: function () {}
});

Voir qui s'abonne à l'événement de réinitialisation

Theater.Views.Movies = Backbone.View.extend({
    initialize: function () {
        _.bindAll(this, "render", "addOne");
        this.collection.bind("reset", this.render);
        this.collection.bind("add", this.addOne);
    },

    render: function(){
        console.log("render")
        console.log(this.collection.length);
    },

    addOne: function (model) {
        console.log("addOne")
    }
})

Site de référence

http://bardevblog.wordpress.com/2012/01/16/udgerstanding-backbone-js-simple-example/

Était-ce utile?

La solution

J'ai eu un problème similaire, j'espère que ma réponse sera utile aux autres. Au début mon data.json Le fichier n'était pas valide. Ensuite, il s'est avéré que j'ai négligé la ligne de code suivante:

Theater.Models.Movie = Backbone.Model.extend({}

L'ajout de cette ligne de code a résolu le problème pour moi.

Autres conseils

Vous devriez dire à la colonne vertébrale de tirer la réinitialisation sur Fetch en passant {réinitialiser: true} lors de la récupération comme de l'épine dorsale 1.0

Remplacer :

Theater.movies.fetch()

Avec

Theater.movies.fetch({reset :true})

Il pourrait y avoir un problème avec votre récupération si la collection n'est pas remplie. Voir Cette réponse Pour voir comment passer un gestionnaire d'erreurs dans l'opération Fetch.

J'ai le même iusse .. et je l'ai corrigé par:

youColloection.fetch({reset: true});
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top