2015-03-14 3 views
2

У меня есть представление, которое имеет свойство headerClass, которое я определяю в верхней части представления и различными способами. Меняю значение на this.headerClass = 'new value'.Как наблюдать за переменными изменениями в Backbone

Но как я могу следить за изменениями этой переменной? Я попытался добавить this.headerClass.on("change", this.render, this);, но при этом получаю сообщение об ошибке.

Ниже мой код

MyView = Backbone.View.extend({ 
    el: $(".header"), 
    template: _.template($("#header-template").html()), 
    headerClass: 'normal', 

    initialize: function() { 
     this.render(); 

     //This doesn't seem to work 
     this.headerClass.on("change", this.render, this); 
    }, 

    render: function() { 
     this.$el.html(this.template({headerClass: this.headerClass})); 
     return this; 
    }, 

    changeClass: function() { 
     //When the value changes I want to re-render the view 
     this.headerClass: 'fluid'; 
    } 
}); 
+0

Вы можете настроить пользовательский прослушиватель на представление, а затем вызвать его при изменении заголовка. еще один вариант - подключить модель к просмотру и прослушать его изменения ... – MorKadosh

+0

Я уверен, что это просто ошибка копирования/вставки, но у вас есть проблема в вашей функции 'changeClass' при установке значения' headerClass'. Вы должны использовать оператор равенства, а не двоеточие. – Lix

ответ

6

Я хотел бы предложить реализацию своего рода setter функции для этого атрибута. Каждый раз, когда эта функция вызывается с новым значением, событие вызывает событие.

set_headerClass: function (value) { 
    this.headerClass = value; 
    this.trigger("changed:headerClass"); 
} 

Теперь вы можете добавить слушателя к представлению и наблюдать за изменениями:

initialize: function() { 
    ... 
    // Will re-render the view when the event is detected. 
    this.on("changed:headerClass", this.render, this); 
}, 

Если вы хотите изменить значение headerClass, вы могли бы сделать это путем вызова функции сеттер:

changeClass: function() { 
    this.set_headerClass('fluid'); 
} 
0

вы можете вызвать событие, когда значение изменяется

this.on('headerClassChanged', this.render); 


    this.trigger('headerClassChanged'); 
+0

Вы на правильном пути! Однако проблема здесь заключается в том, чтобы знать *, когда * запускает событие - это то, о чем фактически спрашивает OP - как узнать, когда атрибут был изменен. – Lix

+0

жаль, что я думал, что headerClass является элементом DOM, я обновил свой ответ –

Смежные вопросы