Ember.js - 在车把内初始化的视图中调用方法

Ember.js - call methods in views initialized within handlebars

本文关键字:视图 调用 方法 初始化 js Ember      更新时间:2023-09-26

我有一个App.WidgetView负责设置和渲染一个非常昂贵的第三方 ui 元素,让我们称这个 ui 元素为widget。此widget具有refresh()方法。我在App.WidgetView中定义了一个调用widget.refresh()refreshWidget()方法。

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}}

现在我需要在App.widgetController中有一个refreshAll()方法,并且我不太清楚如何干净地做到这一点。现在我在App.widgetController有一处refresher房产,从0开始,每次打电话refreshAll都会被起诉。

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

那么在App.WidgetView中,有一个refresherBinding被束缚在App.widgetController.refresher上,一个观察者召唤refreshWidgetrefresher发生变化时

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

它确实有效,但我想知道是否有更清晰的方法可以做到这一点。

听起来你应该

有一个负责实现refreshAll的父视图,然后它可以循环访问它的子视图,告诉他们刷新。