把手混乱我不明白

时间:2017-03-28 20:43:08

标签: javascript handlebars.js

我已尽力调试,但我无法弄清楚为什么这段代码不起作用..我知道它是我的错,但我无法找到错误。请帮帮我们

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 个答案:

答案 0 :(得分:1)

我在代码中看到了3个问题。

  • for in最好迭代对象。在这种情况下,分割输出时是一个数组。用户for代替循环。
  • 当你更换元素时,你有一个错字。假设是innerHTML
  • radioList(val) - &gt; ()将调用一个方法,您可以在其中访问属性。所以它必须是[]

您可以尝试这种方法。但我强烈认为你应该使用不同的分隔符而不是\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