2017-03-28 22 views
1

私は完全にデバッグするために最善を尽くしましたが、私はなぜこのコードが動作しないのか分かりません..私は自分の誤りを知っていますが、私がコード内の3つの問題を参照してください男ハンドルバーの混乱私はそれを取得しません

https://codepen.io/blaze4dem/pen/zZmqKa

var docs = document.getElementById('pag_temp').innerHTML; 
var template = Handlebars.compile(docs); 

Handlebars.registerHelper("makeradio", function(name, options){ 
     var radioList = options.fn(); 
     radioList = radioList.trim().split("\n"); 

     var output = ""; 
     for(var val in radioList){ 
     var item = radioList(val).trim(); 
     output += '<input type="radio" name="'+ name +'" value="'+ item +'"> '+ item + '<br/>'; 
     }; 
     return output; 
    }); 

    var tempdata = template({}); 
    document.getElementById('dynamic').innaHTML += tempdata; 

答えて

1

を助けてください。

  • for inは、オブジェクトを反復処理するのが最適です。この場合、出力を分割すると配列になります。代わりにユーザーforループ。
  • 要素を置き換えるときに、タイプミスがあります。あなたがプロパティにアクセスしたい場合は、innerHTML
  • radioList(val) - >()がメソッドを呼び出します。したがって、それは[]でなければなりません。

このアプローチを試すことができます。しかし、私は強くあなたが別の区切り文字を使用しての代わりに、あなたの答え仲間のため\n

var docs = document.getElementById('pag_temp').innerHTML; 
var template = Handlebars.compile(docs); 

Handlebars.registerHelper("makeradio", function(name, options) { 
    debugger; 
    var radioList = options.fn(); 
    var hasSpaces = radioList.indexOf(' ') > -1; 
    var hasNewLines = radioList.indexOf('\n') > -1; 

    if (hasNewLines) { 
    radioList = radioList.trim().split("\n"); 
    } else if (hasSpaces) { 
    radioList = radioList.trim().split(" "); 
    } 

    var output = ""; 
    // for in is best to iterate over objects. 
    // use for loop instead 
    for (var i = 0; i < radioList.length; i++) { 
    var item = radioList[i].trim(); 
    output += '<input type="radio" name="' + name + '" value="' + item + '"> ' + item + '<br/>'; 
    }; 
    return output; 
}); 

var tempdata = template({}); 
document.getElementById('dynamic').innerHTML += tempdata; 

Check Fiddle

+0

感謝しなければならないと感じて、しかし、私は考えにあなたがちょうど書いたすべてのコードを持っていません。私は実際にはjavascriptとHandlebarsを使用することを学んでいます。 私は実際にビデオチュートリアルに従っています。チュートリアルで上のコードは正常に動作していますが、私はデバッグしようとしましたが、バグの意味を理解できません(関数ではありません)。 ビデオチュートリアルでハンドルバーのバージョンがv4.0.2で、私のバージョンがv4.0.5であるからです。 – Blaze4dem

+0

'radioList(val)'でなければなりません。 'radioList'は'() 'を使って呼び出すことのできる関数ではないからです。 '[]'はプロパティへのアクセスに使用されます。 'var obj = {a:10};' 'obj ['a']やobj.a'を使って' a'の値にアクセスすることができます。値10を吐き出します。代わりにアクセスしようとすると'obj()'を使うと、あなたが見たエラーで失敗します。 –

関連する問題