2015-06-09 34 views
1

我想知道什麼是控制組件上行爲的最佳方法。我有個{{stop-watch}}組件。在emberjs組件上運行函數

我想startstopreset組件通過使用{{stop-watch}}在他們的模板中的路線。啓動和重置功能應該允許我以某種方式傳遞秒數來運行。

如果組件只能真正支持綁定而不是執行行爲的能力,這怎麼能做到呢?

這是我能想到的唯一辦法。在這種情況下; isStarted,isStopped和isReset是布爾變量,我會切換它們來控制組件。

{{stop-watch start=isStarted stop=isStopped reset=isReset timeout=timoutSeconds}} 

切換這樣爲每個屬性在控制器綁定

this.set('isStarted', !this.get('isStarted')); 

遵守這樣爲每個屬性在組件

startUpdated : function() { 
    //start the timer 
}.property('start') 

我認爲上述的解決方案是非常不雅和詳細而且必須有更好的方法來實現這一點。

這種情況下的最佳做法是?

回答

1

您應該擁有一個擁有狀態和方法來控制狀態的模型。

您在路線中設置了模型的一個實例,然後您就可以在控制器和秒錶組件中控制它。

組件將根據模型的屬性自動更新外觀,並且可以通過組件上的操作調用模型上的方法。

+0

確定這是有道理的。所以我應該綁定到這樣的'{{stop-watch controls = stopWatchControls}}'。你會在哪裏放置'stop-watch-controls'模型?在模型文件夾中?它以某種方式屬於該組件。 – jax

+0

將模型視爲秒錶本身。你可以折騰模型,有多個實例,等等。而組件僅僅是模型的接口。你可以有多個接口, G。完整而緊湊。 –

+0

所有的邏輯和行爲應該在模型中,組件應該只有與可視化相關的邏輯(例如模擬時鐘的位置),而不是時間計數的東西。是的,您可以將模型放入模型文件夾中。 –