2013-01-08 78 views
5

所以後如何申請一個jQuery插件,我這是在非常標準的方式呈現的ArrayController:Ember.js:新項目插入到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任何回調的參考?

回答

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(); 
    } 
}); 
+0

謝謝,它的工作,只是對它的性能影響感興趣,如果說,渲染大約100個或更多的項目。 –

2

我看到兩個可能性:

1 - 你的陣列,它被炒魷魚的每一個元素插入時間設置的觀察員。但是你不會自動獲得對新元素的引用。

yourObserver : function(){ 
    ... 
}.observes("[email protected]") 

2 - 總結你的列表項可在自己的視圖(例如:App.ListItemView),並使用didInsertElement事件:

{{#each}} 
    {{#view App.ListItemView}} 
    <li>... </li> 
    {{/view}} 
{{/each}} 

App.ListItemView = Ember.View.extend({ 
    didInsertElement : function(){ 
    this.$().timeago(); 
    } 
} 
+0

感謝,#2是我想要的。 – mrbrdo