Frage

Bei der Anforderung einer data.json-Datei zum Auffüllen der Sammlung mit den folgenden Daten

[{
    "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"
}]

Collection ruft das Ereignis "Zurücksetzen" nicht wie in der Dokumentation angegeben auf.Ich kann sehen, dass die Anfrage und die Antwort nach der Abrufmethode korrekt sind, aber nichts passiert.Unten ist der Code für meine App. Router, der startet, ist alles

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();

die Sammlung

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

Ansicht, die das Rücksetzereignis abonniert

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")
    }
})

Referenzseite

http://bardevblog.wordpress.com/2012/01/16 / verständnis-backbone-js-einfaches-beispiel /

War es hilfreich?

Lösung

Ich hatte ein ähnliches Problem. Ich hoffe, dass meine Antwort für andere von Nutzen ist.Zuerst war meine data.json-Datei ungültig.Dann stellte sich heraus, dass ich die folgende Codezeile übersehen hatte:

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

Durch Hinzufügen dieser Codezeile wurde das Problem für mich behoben.

Andere Tipps

Sie sollten Backbone anweisen, den Reset beim Abrufen auszulösen, indem Sie beim Abrufen ab Backbone 1.0 {reset: true} übergeben.

Ersetzen:

Theater.movies.fetch()

Mit

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

Möglicherweise liegt ein Problem mit Ihrem Abruf vor, wenn die Sammlung nicht gefüllt wird.Unter dieser Antwort erfahren Sie, wie Sie einen Fehlerbehandler an den Abrufvorgang übergeben.

Ich habe das gleiche Problem .. und habe es behoben durch:

youColloection.fetch({reset: true});

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top