1

私の Backbone.js アプリには、次のモデルとビューがあります。

var Operation = Backbone.Model.extend({

    defaults: function() {
        return {
            sign: '-',
            value: '0000',
            index: 0
        }
    }
});
var operation = new Operation();

var OperationView = Backbone.View.extend({

    el: '#operation',

    initialize: function() {
        this.listenTo(this.model, 'change:sign change:value', this.renderOperation);
        this.renderOperation();
    },

    renderOperation: function() {
        console.log('rendered once');
        this.$el.html(this.model.get('sign') + this.model.get('value'));
    }
});
var operationView = new OperationView({ model: operation });

ビューが監視する場所

'change:sign change:value'

(...「符号」または「値」が変更されるたびにビューを更新します。)

私が使うとき

// Test
setInterval(function() {
    var newValue = parseInt(operation.get('value'), 10);
    newValue += 500;
    newValue += '';
    operation.set({ 'sign': '+', 'value': newValue });
}, 1000);

... setInterval が初めて実行されると、ビューは 2 回更新されます (「1 回レンダリング」は console.logged 2 回です)。

ただし、符号と値の両方を「同時に」設定しているので、ビューが一度だけ更新された方がよいでしょう。

質問: Backbone.js で、モデルの複数の (特定の) 属性の変更を listenTo() し、複数の属性が同時に設定されている場合にビューを1 回だけレンダリングする方法はありますか?

4

1 に答える 1