2013-06-18 69 views
6

Ember & Rails newb在這裏有一個關於兩者的嚴重問題。Ember-rails項目作爲一種可安裝的引擎?

我建設,充分利用餘燼,導軌安裝本文舉例說明一個項目:https://github.com/dgeb/ember_data_example

然而,爲了使事情更復雜,這個項目的目的是在被包裝成寶石,列入更大的應用。爲此,我創建了一個可掛載的引擎,其中包含一個用於測試的虛擬項目。

問題是,ember-rails,特別是handlebars無法在預期位置找到模板。這可以防止很多功能正常工作。

在移動車把模板目錄而言,我已經找到了解決辦法在這裏:How can I specify an alternative directory for my HandlebarsJS templates with the ember-rails gem?

總之它指出,我們可以通過設置config.handlebars.templates_root

值指定路徑在application.rb中模板

但是,我認爲這應該會導致衝突應該另一個 ember-rails引擎需要加載到一個更大的應用程序..並且那個將需要它自己的配置設置。

有沒有人有這些設置的經驗,有沒有什麼辦法讓名稱空間的燼應用程序在更大的上下文中播放不錯?

順便說一下,這是rails 4運行ruby 1.9.2上最新的ember-rails。

回答

7

做了很多的研究,似乎灰燼支持覆蓋默認的解析器:http://emberjs.com/api/classes/Ember.DefaultResolver.html

可以指示按照這裏的指示去尋找模板在您的命名空間中的應用:https://github.com/emberjs/ember.js/pull/2354

在本質上,解析器可以被添加到您的Ember.Application.create():(在上述拉請求報價@lukemelia)

App1 = Ember.Application.create({ 
    resolver: Ember.DefaultResolver.extend({ 
     resolveTemplate: function(parsedName) { 
      parsedName.fullNameWithoutType = "app1/" + parsedName.fullNameWithoutType; 
      return this._super(parsedName); 
     } 
    }) 
}); 

這似乎是EMB的一部分呃rc5在寫作時。

1

我剛剛在一個rails引擎中創建了一個應用程序應用程序,並且遇到了與獲得handlebars支持相同的問題。我無法在引擎中使用ember-rails工作,所以我查看了ember-rails源代碼,並最終直接在我的引擎中註冊了帶有傾斜的把手。在ember-rails內部有一些配置來改變根模板路徑:handlebars.templates_root。然而,我沒有成功地讓它在一個rails引擎中工作。

https://github.com/andrewmp1/spree_outlet

我還沒有真正grokked我會怎麼做集成測試瓦特/虛擬應用程序。但它的出現。

0

這是一個old ember app and also a rails engine。它使用基於gemfile條目的ember-rails gem。你可能想要查看它。看到它安裝在軌道應用程序在這裏:ember-cart-example。另外,這裏是online demo of the mounted rails engine inside the rails app

+1

它看起來像他們手動定義每個視圖,這正是你想要避免的情況:即TEMPLATENAME:「 ember_cart/templates/carts/mini_cart_list' –

+0

是的你是對的。 – brg

+0

@alex做了你粘貼的代碼爲你解決它。如果確實如此,那麼您可能想要接受自己的答案,以便將來任何Google帶到這裏的人都會知道哪些方法有效。 – brg

0

還有另外一個解決方案:效率不是很高,但它很簡單,它適用於這種情況(作爲引擎在rails應用程序中使用)。首先在引擎中創建一個初始化程序。在引擎的config目錄中沒有初始化程序目錄,但是可以創建一個初始化程序,並且可以使用初始化程序。與發動機

# path_to_engine/config/initializers/ember.rb 
YourEngine::Engine.config.handlebars.templates_root = "your_path/templates" 

任何其他特定燼的配置可以在這裏還擺放