2013-11-14 3 views
0

Я видел примеры людей, вызывающих this.render() при прослушивании изменений в модели.Магистраль, что происходит, когда вы вызываете render() mupliple times

initialize : function() { 
    this.listenTo(this.model, "change:someAttribute", this.render()); 
    this.listenTo(this.model, "change:someOtherAttribute", this.render()); 
} 

если функция визуализации() создает вид из некоторого шаблона подчеркивания и прикрепления его к HTML документу, что происходит с существующем HTML, который был прикреплен изначально? Если бы я выбрал выпадающее меню и какой-либо текст в одном из полей представления, почему они не возвращаются к значениям по умолчанию при вызове функции render()?

+0

Вы уверены, что вы видели их вызова 'this.listenTo (..., this.render())' вместо 'this.listenTo (..., this.render)'? –

+0

О, у меня создалось впечатление, что 'this.render' и' this.render() 'были одинаковыми, они оба вызывают функцию на объекте ... – jax

+1

Не в JavaScript,' this.render' is просто ссылка на функцию, тогда как 'this.render()' вызывает метод 'render' на' this'. Это разные вещи. –

ответ

0

Что происходит с DOM зависит от того, что вы делаете в вашем методе визуализации, если заменить целые элементы HTML с

this.$el.html(_.template(htmlString, data)); 

из, если вы просто добавить к нему

this.$el.append(_.template(htmlString, data)); 

Есть разные сценарии, основанные на настройке вашего приложения, но я думаю, что в основном вы будете иметь метод рендеринга, заменяющий весь элемент, и тогда у вас будет прослушиватель событий, связанный с изменениями коллекции, например, поэтому, если модель добавлена ​​в коллекцию вы добавляете вспомогательный вид в основные виды el.

var view1 = Backbone.View.extend({ 
el: '#view1div', 
initialize: function(){ 
    this.collection.bind('reset', this.render, this); 
    this.collection.bind('add', this.addElement, this); 
}, 
render: function(){ 
    this.$el.html('<ul id="list"></ul>'); 
}, 
addElement: function(){ 
    $('#list').append('<li>something</li>'); 
} 
}); 
Смежные вопросы