1

これが私の背骨です:

App.Models.Count = Backbone.Model.extend({
        url: this.url,
        initialize: function() {
            this.fetch({
                success: function(data, response) {
                    this.count = data.get('count');
                    console.log(this.count);  // 9, correct answer
                }
            });
        }
    });

    App.Views.Count = Backbone.View.extend({
        tagName: 'span',
        initialize: function(options) {
            this.count = this.options.count;
            console.log(options);  // returns correctly
            this.model.on('reset', this.render, this);
        },
        render: function() {
            console.log('test'); // not called
            this.$el.html(this.model.toJSON());
            return this;
        }
    });

そして私のルートでは:

var mc = new (App.Models.Count.extend({'url' : 'main-contact-count'}))();
var mcv = new (App.Views.Count.extend({ model: mc }))();
console.log(mcv); // 9, correct answer
$('#contactCount').html(mcv);

ご覧のとおり、私のrenderメソッドは呼び出されません。また、Firebugでconsole.logを実行した結果に基づいて、モデルの前にビューが呼び出されているようです。それは非同期のせいですか?なぜrender呼ばれないのですか?

4

1 に答える 1

2

あなたはファンキーな方法でバックボーンを使用しています。これを行うためのより標準的な方法は次のとおりです。

App.Models.Count = Backbone.Model.extend({
    urlRoot: "main-contact-count"
});

App.Views.Count = Backbone.View.extend({
    tagName: 'span',
    initialize: function(options) {
        this.model.on('change', this.render, this);
    },
    render: function() {
        console.log('test');
        this.$el.html(this.model.toJSON());
        return this;
    }
});

そしてルーターで:

var mc = new App.Models.Count();
var mcv = new App.Views.Count({model: mc});
mc.fetch();
$('#contactCount').html(mcv.el);

編集

Backboneモデルで「リセット」を聞いていることがわかります。これは決して起こりません。リセットする代わりに「変更」を聞いてみてください。

this.model.on('change', this.render, this);
于 2013-01-10T16:08:15.367 に答える