2012-11-01 61 views
3

如何有條件地要求使用鏈輪的資產?鏈輪的條件需求

我GOOGLE瞭解決辦法前問,發現在鏈輪庫討論 - Conditional require

解決方案討論有使用ERB:

<% require_asset "#{ActiveScaffold.js_framework}/my_test" %> 

我試着這樣說:

app.js.erb

<% if debug == true %> 
    <% require_asset "lib-debug" %> 
<% else %> 
    <% require_asset "lib-min" %> 
<%end%> 

Rake文件

def bundle_app(debug) 
    env = Sprockets::Environment.new 
    env.append_path "app/" 
    env.js_compressor = Uglifier.new 
    assets = env.find_asset("app.js.erb") 
    return assets.to_s 
end 

但它會導致以下錯誤:

undefined local variable or method `debug' for #<#:0x00000001576d30>

肯定是有一些容易修復的錯誤,但我是新來的Ruby,只是不能發現它。

回答

1

一個可能的解決方案是添加以下到bundle_app方法:

env.context_class.class_eval "def debug; #{!!debug}; end" 

更新bundle_app()方法:

def bundle_app(debug) 
    env = Sprockets::Environment.new 
    env.append_path "app/" 
    env.context_class.class_eval "def debug; #{!!debug}; end" 
    env.js_compressor = Uglifier.new 
    assets = env.find_asset("app.js.erb") 
    return assets.to_s 
end 
1

也許,因爲您的示例使用調試作爲參數,你可以使用定居資產在開發環境中?

如果是這樣,在配置/環境/ development.rb

config.assets.precompile << 'lib-debug.js' 
+0

謝謝,真有意思!但我更願意直接在JS代碼中做出這樣的決定,以便我的構建文件不知道應用程序事務。 – tokarev