2011-12-09 10 views
1

ruby​​ on railsコントローラ(.rb)で呼び出す(使用する)javascriptで書かれた関数があります。この関数は、selectを動的に作成してoptgroupを使って選択します。RORコントローラからjavascript関数を呼び出すruby

これをRubyコードに変換するにはどうすればいいですか?私の問題は、ここでjavascriptのコードだdocument.createElement("optgroup");

のようなもののための代替を見つけることだった。

enter function nbFct() { 
var clipLists = ["Default", "Recent", "Sticky lists"]; 
var option1 = ["a", "b"]; 
var option2 = ["a", "x", "c"]; 
var option3 = ["f", "e", "c", "d"]; 
var listType = []; 
var optionType = []; 
for (var i = 0; i < clipLists.length; i++) { 
// create dynamic optgroup from clipLists 
listType[i] = document.createElement("optgroup"); 
listType[i].label = clipLists[i]; 
// alert(listType[i].label) ; 
if(listType[i].label == "Default"){ 
    for (var j = 0; j < option3.length; j++) { 
// create options and attach to optgroups 
    optionType[j] = document.createElement("option"); 
    optionType[j].value = option3[j]; 
//  alert(optionType[j].value) ; 
    optionType[j].appendChild(document.createTextNode(option3[j])); 
    listType[i].appendChild(optionType[j]); 
    } 
} 
else if(listType[i].label == "Recent"){ 
    for (var j = 0; j < option2.length; j++) { 
// create options and attach to optgroups 
    optionType[j] = document.createElement("option"); 
    optionType[j].value = option2[j]; 
//  alert(optionType[j].value) ; 
    optionType[j].appendChild(document.createTextNode(option2[j])); 
    listType[i].appendChild(optionType[j]); 
    } 
    } 
    else{ 
     for (var j = 0; j < option1.length; j++) { 
    // create options and attach to optgroups 
     optionType[j] = document.createElement("option"); 
     optionType[j].value = option1[j]; 
    //   alert(optionType[j].value) ; 
     optionType[j].appendChild(document.createTextNode(option1[j])); 
     listType[i].appendChild(optionType[j]); 
     } 
    } 
    } 
// set the default 
optionType[1].selected = true; 
// clear select menu and append optgroups 
var selectMenu = document.getElementById("clipListOption"); 
while (selectMenu.hasChildNodes()) { 
selectMenu.removeChild(selectMenu.firstChild); 
} 
for (var i = 0; i < clipLists.length; i++) { 
    if (listType[i].hasChildNodes()) { selectMenu.appendChild(listType[i]); } 
    } 
} 
+1

私はここでの票決に同意しません。これは初心者の質問で、MVCの仕組みについての誤解を裏切っていますが、それはその正面からの質問ではありません。 –

+2

ちょっと、ちょっと不公平です...私はRORにJSです。 – mamesaye

答えて

0

あなたは、いくつかの非常に拷問ハッキングを通じて除き、簡単にそれを行うことはできません。 Railsでは、コントローラはビ​​ュー内を見ることができません。可能であれば、それからJavascriptを抽出することはできませんし、何らかの形でそれを独自のローカルバインディングコンテキストで実行します。たとえそれができたとしても、それはなんとかしたくないはずです。それは、MVCというパターンの悪質な違反です。あなたは絶対にこれをやってみたかった場合

、それはおそらくの組み合わせ伴うだろう:クライアントから

  • を、POST JS機能を備えた文字列。

  • JSを評価して解析します。

  • JSをRuby文字列に変換します。

  • コントローラのローカルコンテキストでRuby文字列を評価します。

これは多くの作業です。代わりに、モデルはここで重労働をしていて、コントローラーに指示を与えて出力をビューに渡す必要があります。

+0

私はレールのコードを書き直したいと思っています(助けがあれば!)しかし、私はいくつかの等価物を見つけることができませんでした..ここにはjavascriptコードです: – mamesaye

関連する問題