所以我有一个以非常标准的方式呈现的ArrayController:
<ul>
{{#each controller}}
<li>{{ user.name }} : {{message}} <abbr class="timeago" title="{{unbound datetimeFormatted}}">{{unbound datetimeFormatted}}</abbr></li>
{{/each}}
</ul>
我想要的是在插入新项目后应用jQuery.timeAgo插件,但为了做到这一点,我不知何故应该获得对插入元素的引用。
我尝试了didInsertElement
方法,但只有在渲染整个视图时才触发,我需要将此插件应用于插入DOM的每个新项目。
所以,我的问题确实可以用这样的方式表达 - 有没有办法获得对新插入的DOM元素的引用或者在将新项添加到ArrayController并附加到DOM之后触发的任何回调?
答案 0 :(得分:5)
我建议使用{{each}}
帮助器的无块形式来指定每个元素使用的视图类。
<ul>{{each controller itemViewClass="App.AnItemView"}}</ul>
然后像这样定义App.AnItemView:
App.AnItemView = Ember.View.extend({
template: Ember.Handlebars.compile('{{ user.name }} : {{message}} <abbr class="timeago" title="{{unbound datetimeFormatted}}">{{unbound datetimeFormatted}}</abbr>'),
didInsertElement : function(){
this.$().timeago();
}
});
答案 1 :(得分:2)
我看到了两种可能性:
1 - 在数组上设置一个观察者,每次插入一个元素时都会触发该观察者。但是你没有自动获得对新元素的引用。
yourObserver : function(){
...
}.observes("content.@each")
2 - 在自己的视图中包装列表项(例如:App.ListItemView)并使用didInsertElement事件:
{{#each}}
{{#view App.ListItemView}}
<li>... </li>
{{/view}}
{{/each}}
App.ListItemView = Ember.View.extend({
didInsertElement : function(){
this.$().timeago();
}
}