2013-04-08 20 views
6

ember.jsハンドルバーテンプレートを複数のファイルに分割して、コードベースをより管理しやすくしたいと考えています。テンプレートと別々のファイルを分割するために、emberと一緒につまらないハンドルバーを使用する

yeoman/gruntを使用しているので、私はthis handlebars pluginに出会った。私は以下のように設定しました:

handlebars: { 
     compile: { 
      options: { 
       namespace: 'JST' 
      }, 
      files: { 
       '<%= yeoman.dist %>/scripts/templates.js': [ 
        '<%= yeoman.app %>/templates/*.hbs' 
       ], 
      } 
     } 
    } 

プラグインの「使用例」セクションに示唆されています。これは期待どおりに動作しており、dist/scripts/templates.jsファイルを生成しています。しかし、テンプレートを 'JST'名前空間に入れるとEmberにはアクセスできなくなります。これは私が取得していますエラーです:

Uncaught Error: assertion failed: You specified the templateName application for <App.ApplicationView:ember312>, but it did not exist. 

をいくつかの質問:エンバーはそれらを見つけることができるように

  • は、どのように私は、templates.jsに今あるハンドルテンプレートを、「初期化する」ことができますか?
  • テンプレートがDOM内にどこに配置されるかをemberに伝えるにはどうすればよいのですか?

これは私のindex.htmlです:

<!DOCTYPE html> 
<!--[if lt IE 7]>  <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]--> 
<!--[if IE 7]>   <html class="no-js lt-ie9 lt-ie8"> <![endif]--> 
<!--[if IE 8]>   <html class="no-js lt-ie9"> <![endif]--> 
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]--> 
    <head> 
    <meta charset="utf-8"/> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/> 
    <title></title> 
    <meta name="description" content=""/> 
    <meta name="viewport" content="width=device-width"/> 

    <!-- build:css styles/main.css --> 
    <link rel="stylesheet" href="styles/bootstrap.min.css"/> 
    <link rel="stylesheet" href="styles/css/font-awesome.min.css"/> 
    <link rel="stylesheet" href="styles/font-styles.css"/> 
    <link rel="stylesheet" href="styles/main.css"/> 
    <!-- endbuild --> 

    </head> 
    <body> 

    <!--[if lt IE 7]> 
     <p class="chromeframe">You are using an outdated browser. <a href="http://browsehappy.com/">Upgrade your browser today</a> or <a href="http://www.google.com/chromeframe/?redirect=true">install Google Chrome Frame</a> to better experience this site.</p> 
    <![endif]--> 

    <!-- Add your site or application content here --> 

    <!-- My templates used to be here, but now they are in templates.js --> 

     <div class="pagination"> 
      <ul> 
       <li><a href="#">Prev</a></li> 
       <li><a href="#">1</a></li> 
       <li><a href="#">2</a></li> 
       <li><a href="#">3</a></li> 
       <li><a href="#">4</a></li> 
       <li><a href="#">Next</a></li> 
      </ul> 
     </div> 
    </script> 

    <!-- build:js scripts/scripts.js --> 
    <script src="scripts/vendor/jquery-1.9.1.js"></script> 
    <script src="scripts/vendor/handlebars.1.0.rc.3.js"></script> 
    <script src="scripts/vendor/ember-1.0.0-rc.2.js"></script> 
    <script src="scripts/vendor/ember-data.js"></script> 
    <script src="scripts/vendor/bootstrap.min.js"></script> 
    <script src="scripts/templates.js"></script> 
    <script src="scripts/main.js"></script> 
    <!-- endbuild --> 

    </body> 
</html> 
+0

ちょうどあなたのバックエンドですか? –

答えて

12

我々はヨーマン/うなり声を使用しているので、私は、このハンドルバープラグインに遭遇してきました。

これは、あなたを引き上げるものです。 grunt-contrib-handlebarsプラグインを使用しようとしています。その結果、コンパイルされたテンプレートはEmber.TEMPLATESに追加されていません。これを実現させるためにgrunt-contrib-handlebarsを設定することは可能かもしれませんが、代わりに(grunt-ember-templates)[https://github.com/dgeb/grunt-ember-templates]]を使う方が簡単でしょう。

はエンバーがそれらを見つけることができるように、どのようにして、右もtemplates.jsにあるハンドルテンプレートを、「初期化」することができます

詳細はHow does Ember.js reference Grunt.js precompiled Handlebars templates?を参照してください?

EmberはEmberに何が入るか気にしません。手動でテンプレートを追加/削除することができます。たとえば、次のテンプレートは、文書本体の外になりましたので、

Ember.TEMPLATES['myFunkyTemplate'] = Ember.Handlebars.compile('Hello {{personName}}'); 

がどのように私は、どこDOMでテンプレートを配置する場所を残り火を伝えることができますか?

テンプレートがどこから来ても問題ありません。すべてのテンプレートはテンプレートのIDです。 application.hbsテンプレートは、アプリケーションのルート要素(デフォルトではdocument.body)にレンダリングされ、他のすべてのテンプレートはビューヘルパーなどを介してアウトレットにレンダリングされます。

+0

ありがとうございます。私は 'grunt-ember-templates'を設定しようとしています。私は 'npm install grunt-ember-templates'をインストールしました。私は' Gruntfile.js'で設定しましたが、gruntタスクとしては利用できません。 'grunt --help'を実行すると(私がインストールした古い' handlebars'を含む)利用可能なタスクがたくさん表示されますが、 'ember_templates'は表示されません。なぜそれができますか?'npm -ls'は' npm ERR!無関係:[email protected] .../node_modules/grunt-ember-templates'' – dangonfast

+0

自分の質問に答える: 'grunt-ember-templates'は私のアプリケーションpackage.jsonに追加されていないので、それを手動で追加します。私はかなり他のパッケージがアプリケーションのpackage.jsonに自動的に追加されていると確信しています。 – dangonfast

+0

あなたのために働く素晴らしいチャンス。 Re:package.jsonに追加すると、依存関係をインストールするときに--saveまたは-Sを追加すると、npmはそれを行います。したがって、例えば '$ npm install grunt-ember-templates --save' –

関連する問題