2012-06-07 57 views
2

我有一個App.WidgetView,它負責設置和渲染一個非常昂貴的第三方UI元素,讓我們調用這個UI元素widget。 這個widget有一個refresh()方法。我在App.WidgetView中定義了一個refreshWidget()方法,該方法調用widget.refresh()Ember.js - 在視圖中初始化的視圖中調用方法

App.WidgetView = Em.View.extend({ 
    content: null, 
    widget: null, 
    init: function() { 
     this._super(); 
     //initialize widget using content 
    }, 
    refreshWidget: function() { 
     this.get('widget').refresh(); 
    } 
}); 

我從App.widgetController

{{#each App.widgetController}} 
    {{view App.WidgetView contentBinding="this"}} 
{{/each}} 

的呈現使用#each循環提取數據我的網頁上WidgetView個名單現在我必須App.widgetController一個refreshAll()方法和IM不太舒爾如何幹淨地做這個。現在我有一個refresher財產App.widgetController開始於0並獲得侵入每次refreshAll被調用。

App.widgetController.reopen({ 
    refresher: 0, 
    refreshAll: function() { 
     this.incrementProperty('refresher'); 
    } 
}); 

然後在App.WidgetView有這勢必App.widgetController.refresher一個refresherBinding和一個稱爲refreshWidgetrefresher改變觀察者

App.WidgetView.reopenClass({   
    refresherBinding: 'App.widgetController.refresher', 
    refresherChanged: function() { 
     this.refreshWidget(); 
    }.observes('refresher') 
}); 

它的工作,但我想知道是否有一個推行清潔的方式做它。

回答

4

聽起來像你應該有一個父視圖負責實現refreshAll,然後可以循環它的childViews告訴他們刷新。