2012-06-05 44 views
0

我正試圖在Rails 3.2應用程序中實現select2如何將模型屬性傳遞給coffeescript以便在rails中進行select2模板

具體來說,我想使用模板顯示國家選擇字段與國家的國旗+國名。

我有一個國家模型和用戶模型。我的國家/地區模型具有:code屬性。我使用的CSS精靈顯示標誌,基於:code屬性。

<img class="flag flag-#{country.code}"> 

在用戶的形式我有

<%= f.collection_select :country_id, Country.order(:name), :id, :name, include_blank: true %> 

和user.js.coffee.erb我有

jQuery -> 
    format = (country) -> 
     "<img class='flag flag-#{country.code}' src='#'/>" + country.name  
    $('#prerep_country_id').select2 
     placeholder: "Select a country", 
     allowClear: true, 
     formatResult: format, 
     formatSelection: format 

我有麻煩綁它一起(可能是部分我持續學習資產管道和js.erb的工作方式)。

當前選擇字段使用select2呈現,但僅包含國家/地區列表。沒有格式。

如何通過每個國家的format = (country)功能,使它得到格式化的國旗?

感謝您的指點。

回答

1

fine manual:用於渲染當前選擇

formatSelection

功能。

formatSelection(object) 

object參數是

query函數返回的選擇的結果對象。

而且還有更遠,我們看到什麼query是一回事,具體爲:

結果對象數組。默認渲染器需要使用idtext鍵的對象。即使使用自定義渲染器,也需要id屬性。

如果我們來看一個例子(http://jsfiddle.net/ambiguous/a73gc/),我們將看到你的format功能被傳遞一個country對象與idtext鍵。而你,另一方面,正在尋找country.code但什麼也沒有和你產生相似圖片:

<img class='flag flag-' src='#'/> 

這樣你就不會得到任何標誌。

試試這個:

format = (country) -> 
    "<img class='flag flag-#{country.id}' src='#'/>" + country.name 
    #--------------------------------^^ 

想必你有heightwidthimg.flag CSS已經所以我們不必擔心標誌有多大。另外,如果您使用的是HTML5,那麼您可能會丟失XML式/>自動關閉標籤,只需要<img ...>即可。

+0

感謝您的一個非常有用的答案。所以爲了澄清一下,如果我需要':code'屬性,我可以執行類似'

+0

@AndyHarvey: Is '$('#prerep_country_id').select2' getting called at all? There should be an 'id' in the 'country' that is passed to 'format', is 'format' getting called? –

+0

yes, '$('#prerep_country_id').select2' is being called, but format isn't. What;s the best way to step through this and work out where it's failing? –

相關問題