2

ビューで .ejs テンプレートを使用しています。しかし、何らかの理由で、ビューは指定されたテンプレートをロードしません。未定義を返します。コードは次のとおりです。

sandplate2.applicationView = Backbone.View.extend({
    el: 'div',

  template: _.template($("appl.ejs").html()),

  initialize: function(){
    console.log("Application view initialize");

    _.bindAll(this, "render");

    this.render();
  },

  render: function(){
    console.log("Application view rendering");
    this.$el.html(this.template());
    return this;
  }
});

テンプレートをロードするために何か他の設定をする必要がありますか?

Yeoman を使用してアプリを構築しました。init および backbone ジェネレーターを使用しました。

参考までに - 読み込もうとしているテンプレートは、スクリプト要素を使用して index.html に読み込まれます。

4

3 に答える 3

2

Yeomanを使用してビルドした場合は、app.jsを調べて、Backbone.LayoutManagerを使用しているかどうかを確認してください。EJSを機能させるには、そこで構成を変更する必要がある場合があります。デフォルトでは、アンダースコアテンプレートを期待しているはずです。

ハンドルバーを使用していて、app.jsを次のように更新しました。

Backbone.LayoutManager.configure({
  manage: true,

  paths: {
    layout: "templates/layouts/",
    template: "templates/"
  },

  fetch: function(path) {
    path = path + ".html";

    if (!JST[path]) {
      $.ajax({ url: app.root + path, async: false }).then(function(contents) {
        JST[path] = Handlebars.compile(contents);
      });
    }

    return JST[path];
  }
});

また、モジュールのdefine()呼び出しにハンドルバーを追加し、参照として「ハンドルバー」を渡しました。EJSについても同様のことをする必要があるかもしれません。

于 2012-09-24T18:01:08.947 に答える
0

慣習はさておき、問題は単に jQuery ルックアップにあるようです。

_.template($("appl.ejs")...

$('appl.ejs')index.html にこのような要素がない限り、有効な DOM セレクターではありません

<appl class="ejs"></appl>

テンプレートを jQuery でターゲットにしようとしている場合は、ID または jQuery が次のように見つけられるものを与えます。

<script type="text/template" id="appl">
    <div></div><!-- template html here -->
</script>

    // later...
    $('#appl').html()
    // will get your template html

ただし、他の人が言及したように、yeoman と require.js のワークフローでは、require.js にテンプレートをテキストとしてフェッチし、アンダースコア テンプレートを作成する前に変数として渡すように要求できます。

于 2014-01-26T00:39:11.447 に答える