我有一个App.WidgetView
负责设置和渲染一个非常昂贵的 3rd 方 ui 元素,我们称之为 ui 元素widget
。这widget
有一个refresh()
方法。我定义了一个refreshWidget()
方法,App.WidgetView
其中调用widget.refresh()
.
App.WidgetView = Em.View.extend({
content: null,
widget: null,
init: function () {
this._super();
//initialize widget using content
},
refreshWidget: function () {
this.get('widget').refresh();
}
});
我WidgetView
使用#each
循环从App.widgetController
{{#each App.widgetController}}
{{view App.WidgetView contentBinding="this"}}
{{/each}}
现在我需要有一个refreshAll()
方法,App.widgetController
我不太清楚如何干净地做到这一点。现在,我有一个refresher
属性,每次调用时都会在App.widgetController
其中开始并入罪。0
refreshAll
App.widgetController.reopen({
refresher: 0,
refreshAll: function () {
this.incrementProperty('refresher');
}
});
然后App.WidgetView
有一个refresherBinding
绑定到的App.widgetController.refresher
和一个观察者,它refreshWidget
在refresher
变化时调用
App.WidgetView.reopenClass({
refresherBinding: 'App.widgetController.refresher',
refresherChanged: function () {
this.refreshWidget();
}.observes('refresher')
});
它确实有效,但我想知道是否有更清晰的方法来做到这一点。