1

私のアプリについて:
- Rails 3.2.6 と backbone.js (backbone-on-rails gem) およびハンドルバー テンプレート エンジンを使用しています。
- ルートとビューを作成すると、うまく機能します。私の見解:

  el: $('#lorem'),
  render: function(){
    var js = this.collection.toJSON();
    var template = Handlebars.compile($("#lorem2").html());
    $(this.el).html(template({articles: js}));
    console.log(js);
    return this;
  }

- テンプレートを作成しました (assets dir: assets/templates/peoples/index.hbs):

<script id="lorem2" type="text/x-handlebars-template">
    {{#each articles}}
       {{this.name}}
     {{/each}}
</script>

ページを更新すると、次のエラー メッセージが表示されます。

キャッチされていない TypeError: null のメソッド 'match' を呼び出せません

テンプレートファイルが間違っている可能性があると思います:

<script src="/assets/templates/people/index.js?body=1" type="text/javascript"></script>

これには以下が含まれます:

    (function() {
            this.HandlebarsTemplates || (this.HandlebarsTemplates = {});
            this.HandlebarsTemplates["people/index"] = Handlebars.template(function (Handlebars,depth0,helpers,partials,data) {
  helpers = helpers || Handlebars.helpers;
  var buffer = "", stack1, foundHelper, self=this, functionType="function", helperMissing=helpers.helperMissing, undef=void 0, escapeExpression=this.escapeExpression;


  buffer += "<div class=\"entry\">\n  <h1>";
  foundHelper = helpers.title;
  stack1 = foundHelper || depth0.title;
  if(typeof stack1 === functionType) { stack1 = stack1.call(depth0, { hash: {} }); }
  else if(stack1=== undef) { stack1 = helperMissing.call(depth0, "title", { hash: {} }); }
  buffer += escapeExpression(stack1) + "</h1>\n  <div class=\"body\">\n    ";
  foundHelper = helpers.body;
  stack1 = foundHelper || depth0.body;
  if(typeof stack1 === functionType) { stack1 = stack1.call(depth0, { hash: {} }); }
  else if(stack1=== undef) { stack1 = helperMissing.call(depth0, "body", { hash: {} }); }
  if(stack1 || stack1 === 0) { buffer += stack1; }
  buffer += "\n  </div>\n</div>\n";
  return buffer;});
            return HandlebarsTemplates["people/index"];
          }).call(this);
4

1 に答える 1

2

この混乱は/assets/templates/people/index.js、Handlebars テンプレートが、JavaScript コードで認識される前に JavaScript にコンパイルされていることを示しています。

どれも一致しない$(x).html()ところを言うと、裏が返ってきます。したがって、おそらくDOM にはまったくありません。コンパイル済みのテンプレートが にあるだけです。つまり、あなたのこの部分:xnull#lorem2HandlebarsTemplates["people/index"]render

var template = Handlebars.compile($("#lorem2").html());

失敗し、TypeError例外が発生します。それを次のように置き換えてみてください:

var template = HandlebarsTemplates['people/index'];
于 2012-07-24T21:01:17.277 に答える