3

我正在尝试使用 Backbone.js 完成一项基本任务,但无法使其正常工作。我只想对我的模型执行获取操作并让它更新视图。这是我的代码:

(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”加载成功,但渲染函数永远不会被调用。

我错过了什么?

4

2 回答 2

3

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

于 2012-05-29T00:27:14.053 回答
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 不存在,或者至少是错误的,并且悄悄地失败了。

于 2012-05-28T23:50:35.300 回答