Кто-нибудь знает, какое событие будет запущено после представления в backbone.js?Backbone.js событие после view.render() завершено
ответ
Насколько я знаю - none is fired. Функция Render пуста в исходном коде.
The default implementation of render is a no-op
Я бы порекомендовал просто запускать его вручную, когда это необходимо.
constructor: function(){
Backbone.View.call(this, arguments);
var oldRender = this.render
this.render = function(){
oldRender.call(this)
// this.model.trigger('xxxxxxxxx')
}
}
как этот http://jsfiddle.net/8hQyB/
Для этого вам не нужно переписывать конструктор. – mate64
Конструктор - это не главное. вы также можете запустить его вручную или использовать jquery $ .Deferred. @ cept0 – user873792
Я столкнулся с этой post, который кажется интересным
var myView = Backbone.View.extend({
initialize: function(options) {
_.bindAll(this, 'beforeRender', 'render', 'afterRender');
var _this = this;
this.render = _.wrap(this.render, function(render) {
_this.beforeRender();
render();
_this.afterRender();
return _this;
});
},
beforeRender: function() {
console.log('beforeRender');
},
render: function() {
return this;
},
afterRender: function() {
console.log('afterRender');
}
});
Зачем вам нужна эта строка: '_.bindAll (это, 'beforeRender', 'render', 'afterRender');'? – pilau
@pilau - см. [This] (http://blog.bigbinary.com/2011/08/18/understanding-bind-and-bindall-in-backbone.html) для понимания _.bind и _.bindAll. Это помогло мне, надеюсь, это тоже поможет. – arunkjn
Я знаю, что он делает, я спрашиваю, зачем вам вообще нужно использовать его, поскольку они (функции) все равно расширяют объект вида? – pilau
Или вы можете сделать следующее, что и код Backbone должен выглядеть (шаблон Observer, aka pub/sub). Это путь:
var myView = Backbone.View.extend({
initialize: function() {
this.on('render', this.afterRender);
this.render();
},
render: function() {
this.trigger('render');
},
afterRender: function() {
}
});
Edit: this.on('render', 'afterRender');
не будет работать - потому что Backbone.Events.on
принимает только функции. Волна .on('event', 'methodName');
сделана возможной Backbone.View.delegateEvents
и как таковая доступна только с событиями DOM.
Вместо добавления обработчика событий вручную для рендеринга при иналинизации вы также можете добавить событие в раздел «События» вашего представления. См. http://backbonejs.org/#View-delegateEvents
например.
events: {
'render': 'afterRender'
}
afterRender: function(e){
alert("render complete")
},
Это не работает. События делегата относятся к событиям, которые происходят в dom. Не обратные вызовы на самом объекте представления. – louism2
'events' используется для' декларативных обратных вызовов для событий DOM', см. [Backbone/# View-delegateEvents] (http://documentcloud.github.io/backbone/#View-delegateEvents) – RainChen
Если вам случится использовать Marionette, кукольный добавляет show
и render
события в представлениях. См. Пример this StackOverflow question.
На стороне записки, кукольный добавляет много других полезных функций, которые вы могли бы быть заинтересованы в
приветствий, ваше решение работал для меня :) –
@StefanSchmidt кстати. - попробуйте прочитать Backbone.js исходный код самостоятельно , это вполне читаемо. –
да ... вот что я понял после твоего поста. прежде чем я немного испугался. kinda javascript noob: D –