2015-05-28 52 views
0

在Ember的最新版本(1.10+)中,似乎有使用組件而不是控制器和視圖的趨勢。何時使用控制器在使用Ember組件時使用組件

The wisdom seems to be: 「在頂級只使用控制器,用於從路由接收數據,並使用Ember.Controller代替Ember.ArrayController或Ember.ObjectController」

這使得一些有意義的我,因爲它是很酷來創建可重用的組件,但是有些情況下我不清楚適當的方法是什麼。

說我們有代表在一個表中的行組件,這樣的事情:

# entry-row.js component 
import Ember from 'ember'; 

export default Ember.Component.extend({ 
    tagName: 'tr', 

    actions: { 
    toggleResolving: function() { 
     this.toggleProperty('resolving'); 
    } 
    }, 

    isChecked: function() { 
    return this.get('resolving'); 
    }.property('resolving') 
}); 

# entry-row.hbs template 
<td {{action "toggleResolving"}}>{{entry.name}}</td> 
<td>{{entry.currency.symbol}}{{entry.amount}}</td> 
<td>{{entry.date}}</td> 
<td class="bs-checkbox">{{input type="checkbox" checked=isChecked class="toggle"}}</td> 

以形成臺,許多相同的組件被使用。那很棒。如果存在一些僅適用於該行的非持久狀態,那麼它可以屬於該組件並在那裏進行更改。例如:

actions: { 
    toggleResolving: function() { 
     this.toggleProperty('resolving'); 
    } 
    } 

但是說我的resolving屬性也是有用的組件外。在這種情況下,我希望能夠標記多行進行解析,然後對它們進行一些操作。我相信在切換到組件之前,我會在Controller上定義resolving屬性,並在需要model +狀態的地方使用該控制器。

我還應該把它放在控制器上嗎?

+0

有另一個組件包裝所有行來管理行外的狀態。 – blessenm

+0

@blessenm這也是我最初的想法,但是說我想在我的應用程序中完全斷開某些東西,從而利用它。例如,某個地方的某個狀態框(可能是一個組件本身)會列出當前標記爲解析的行。 – dpwrussell

+0

可能使用事件總線有助於單獨組件之間的通信。 http://www.thesoftwaresimpleton.com/blog/2015/04/27/event-bus/您也可以使用服務並將它們注入到組件中。 – blessenm

回答

0

除了使用外部組件,另一個選項是將屬性放在模型上。您還可以與mixin分享常見操作。

相關問題