主干.js集合在读取操作后不会调用"Reset"事件



请求用于填充具有以下数据的集合的data.json文件时

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

集合不会像文档所说的那样调用"Reset"事件。我可以在fetch方法之后查看请求和响应是否正确,但什么都没有发生。下面是我的应用程序的代码。路由器启动一切

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

集合

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

订阅重置事件的视图

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

参考网站

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

从Backbone 1.0 开始提取时,您应该告诉Backbone在提取时通过传递{reset:true}来触发重置

替换:

Theater.movies.fetch()

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

我也遇到过类似的问题,我希望我的回复对其他人有用。起初,我的data.json文件无效。后来发现我忽略了以下代码行:

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

添加这行代码为我解决了问题。

如果没有填充集合,那么您的获取可能会出现问题。请参阅此答案,了解如何将错误处理程序传递到获取操作中。

我有相同的iusse。。并通过修复

youColloection.fetch({reset: true});

最新更新