0

次のようなテンプレートがある場合:

<script type="text/x-handlebars" data-template-name="listbeer">
    {{#each controller}}
    <li>{{aname}}</li>
    {{/each}}
    </script>

その後、何も表示されません。一方、もしそうなら:

<script type="text/x-handlebars" data-template-name="listbeer">
    {{#each DHApp.beerlistController}}
    <li>{{aname}}</li>
    {{/each}}
    </script>

それは機能し、表示されたコントローラーのコンテンツからリストを取得します。どうしてこれなの?前者の場合、どのコントローラーが表示されますか。ビューでそれらをバインドしたことに注意してください。

DHApp.ListbeerView = Ember.View.extend({
        templateName: 'listbeer',
});
DHApp.listbeerView = DHApp.ListbeerView.create({
    controller: DHApp.listbeerController,
    contentBinding: 'controller.content'
});

だから私は同じものを見ることを期待しています。コントローラーは配列であることに注意してください。上記のように、各ループでコントローラーを指定すると問題ありません

更新:もしそうなら

{{controller}} {{DHApp.listbeerController}}

それから私は得る

<DHApp.ListbeerController:ember192> <DHApp.ListbeerController:ember149>

インスタンス化したコントローラーではなく、デフォルトのコントローラーを受け取っているようです。

ビューのコントローラーをインスタンス化されたものに設定する方法はありますか。または、ルート外で自動インスタンス化されたコントローラーを取得する方法。コントローラーにアクセスして、ajax 応答、タイマーなどの内部でコントローラー モデルを更新できるようにしたい

4

2 に答える 2

0

これはおそらくコンテキストの問題です。デフォルトでは、コントローラーはレンダリングされたテンプレートのコンテキストになります。あなたが次のようなことをした場合:

  <script type="text/x-handlebars" data-template-name="listbeer">
  {{controller}}
  {{#each controller}}

コントローラは、ほとんどの場合、ApplicationControllerになります(実装の詳細が示されていないとわかりません)。

通常、コントローラーを直接作成するのではなく、ルーターがコントローラーを作成できるようにします。これにより、必要に応じてコンテキストを制御できます。ガイドにはいくつかの良い例があります。

http://emberjs.com/guides/routing/rendering-a-template/

于 2013-01-29T18:49:15.550 に答える
0

以下のことをすると改善されますか?コントローラーに直接アクセスする代わりに、get と set を使用する必要があるためです。

DHApp.ListbeerView = Ember.View.extend({
        templateName: 'listbeer',
});
DHApp.listbeerView = DHApp.ListbeerView.create({
    controllerBinding: 'DHApp.listbeerController',
    contentBinding: 'controller.content'
});

DHAppまた、コードの外観から、古いバージョンの Ember を使用しているように見えます (または、新しい Ember を正しく実装していません)。コントローラーは、EmberJS によって自動的にインスタンス化されている場合、変数からアクセスできなくなりますが、代わりに処理されます。とルータでthis.controllerFor

于 2013-01-29T17:43:27.097 に答える