2016-07-05 60 views
0

因此,我正在構建一個EmberJS應用程序,並且我有一個包含多個組件的路由(例如messagesquestions)。多個組件與多個模型

每個組件都擴展了一個dyn-widget mixin,允許用戶在屏幕上拖動它,因爲它們以畫布上的窗口形式呈現給用戶。

存儲每個dyn-widget窗口中的信息,我用三個餘燼數據模型:存儲任何部件(位置,大小......)共同價值觀dyn-widgetdyn-widget/questions以及包含有關如何附加信息的dyn-widget/chat該小部件與「父」dyn-widget模型建立了一對一關係。

該路線有一個相應的控制器,允許用戶灌輸新的窗口。控制器然後創建一個dyn-widget/whatever模型以及相關的dyn-widget模型,並且所有內容都存儲在本地存儲中。

但是,當我嘗試在路由中實現model()函數時,我發現我無法真正返回多個不同的模型,而沒有hacky解決方案。我想將模型直接放入我的組件中,但打破了以下模式:

Components are isolated entities that consume data through their 
interface, react to data changes that flow via data binding, and 
possibly send up named actions. 

那麼我應該如何處理這個問題?對於這個問題,一個非hacky,Ember的方式會是什麼?

謝謝!

回答

1

這是不正確的,在對流模式的燼對象不能返回多個模型的路線。如果你看一下文檔

https://guides.emberjs.com/v2.6.0/routing/specifying-a-routes-model/#toc_multiple-models

可以使用Ember.RSVP.hash來解決多個資源

樣品路由器的代碼:

model(params) { 
    return Ember.RSVP.hash({ 
    messages: this.store.findAll('message'), 
    questions: this.store.findAll('question') 
    }); 
}, 

通過這種方式,你可以養活你的組件來自多個模型的數據直接來自路由器 - 所以模式是組件獲取數據並將動作發送到路由或控制器。

這是一個做事的標準方法,它是在灰燼從1.x中釋放

我希望這會幫助你。

+0

......該死的你是對的。實際上,我發現我可以在早些時候使用'Ember.RSVP.hash',但由於忘記了商店返回的承諾(厭倦並使用適配器進行非異步存儲,我猜),所以我放棄了它,所以我放棄了它作爲黑客。對不起,非常感謝您的時間! – blue