Backbone:视图不更新(重置事件)

时间:2013-04-08 14:25:01

标签: javascript events backbone.js view

我目前正在使用BackboneJS通过骨干模型从我的数据库中获取数据。

问题是我的应用程序没有触发我的重置事件,即使我的fetch执行得很好,我的数据也不会显示在屏幕上。 如果我在控制台中执行app.messages.toJSON(),我的数据将按要求返回。

你对此有任何想法吗?这是我的代码

var app = window.app = {};

// APP HERE

// Model

app.Message = Backbone.Model.extend({
    url : 'messages'
});

app.message = new app.Message;

// Collection

app.Messages = Backbone.Collection.extend({
    model : app.Message,
    url : 'messages'
});

// Views

app.messages = new app.Message(); 
app.messages.fetch();

app.ListView = Backbone.View.extend({
    template : Handlebars.compile($('#template-list').html()),

    initialize : function(){
        _.bindAll(this, 'render');
        //this.collection.on('reset', this.render); 
    },

    render : function(){
        this.$el.html(this.template({
            collection : this.collection.toJSON()
        }));
        return this;
    }

});

我在咬牙切齿。

西蒙

编辑

完成所有这些代码之后

app.Router = Backbone.Router.extend({
    routes: {
        '*path' : 'home'
    },
    home: function(){
        this.views = {};
        this.views.list = new app.ListView({
            collection : app.messages
        });
        $('#list-shell').empty().append(this.views.list.render().el);
    }
});

app.router = new app.Router();
Backbone.history.start({pushState : true});
Backbone.emulateJSON = true;

1 个答案:

答案 0 :(得分:0)

app.messages = new app.Message();我想这只是你在写这个问题时犯的错误。

至于问题本身,如果您使用的是Backbone 1.0,如果您希望reset flag被解雇,则必须使用reset event。 此外,如果您添加的代码确实是 之后的第一个代码,那么您将在创建路由器之前获取数据,即视图。即使提取方法是异步的,你也无法控制你在这里做的事情。