make backbone.js'fetch'自动更新视图

时间:2012-05-28 23:46:06

标签: javascript ajax backbone.js fetch

我正在尝试Backbone.js应该是一个基本的任务,并且无法让它工作。我只想在我的模型上执行 fetch 操作并让它更新视图。这是我的代码:

(function($) {
    var HomeModel = Backbone.Model.extend({
        defaults: {
            lead: "not logged in",
        },
        url: 'test.php'
    });

    var HomeView = Backbone.View.extend({
        initialize: function() {
            this.model = new HomeModel();
            this.model.bind("change", this.render);
            this.model.fetch();
        },

        el: $("#content"),

        render: function() {
            this.$el.html(this.model.get("lead"));
        }
    });

    var homeView = new HomeView();
})(jQuery);

我可以看到“test.php”成功加载,但 render 函数永远不会被调用。

我错过了什么?

2 个答案:

答案 0 :(得分:2)

我想我有正确的答案。您在this函数中引用render,但this的上下文是事件,而不是您的类。因此,您应该使用下划线的bindAll函数将类绑定到函数的内部。像这样:

var HomeView = Backbone.View.extend({
    initialize: function() {
        _.bindAll(this, 'render'); // bind 'this' in 'render'
        this.model = new HomeModel();
        this.model.bind("change", this.render);
        this.model.fetch();
    },
});

否则this.el不存在,或者至少是错误的,并且安静地失败。

答案 1 :(得分:2)

你是怎么看到“test.php”成功加载的?也许AJAX请求成功,但响应不是有效的JSON?尝试将成功和错误回调添加到fetch调用:this.model.fetch({success: function (resp) { console.log('success: %o', resp) }, error: function (er) { console.log('error: %o', er) });