12

テンプレート内でヘルパーを使用してrenderいます。これは、先行入力で検索ボックスをレンダリングします。

本質的に(簡潔にするためにコードを削除しました):

script(type='text/x-handlebars', data-template-name='index')
    {{render search}}

script(type='text/x-handlebars', data-template-name='search')
    {{view App.TaggableInput valueBinding="searchText"}}

これにより、SearchControllerから分離されたが得られますIndexController

内部App.TaggableInputでは、keyUpsearchControllerイベントのチェックを行っています。

App.TaggableInput = Ember.TextField.extend({
    keyUp: function(e){
        var controller = this.get('controller');
        // Do stuff with the controller
    }
});

Ember RC7 では、期待どおり、ビュー内のコントローラーにアクセスできますthis.get('controller').get('searchText')

ただし、Ember 1.0.0this.get('controller')ではビューが返され、何をしても取得できませんsearchController

何が変更されたか、または何をすべきかについて、ember Web サイトで関連情報を見つけることができません... 今のところ、私は RC7 を使用しています。

何か案は?私は今朝何時間も費やしましたが、理解できません。ありがとう。

更新: 修正済み!

に交換しましたthis.get('controller')this.get('targetObject')、以前と同じように機能します。それを見つけるために、emberソースの最近のコミットを熟読しました...

あなたの提案をありがとう!

4

3 に答える 3

5

私はあなたのコードでそれを推測します

App.TaggableInput = Ember.TextField.extend({
    keyUp: function(e){
        var controller = this.get('controller');
        // Do stuff with the controller
    }
});

この行

 var controller = this.get('controller');

(サブビュー) に関連付けられたコントローラーを取得します

ルートのコントローラーにアクセスするには、代わりに次の行を使用してみてください。

 var controller = this.get('parentView.controller');
于 2013-09-02T11:03:15.650 に答える
3

現在、{{render}}ヘルパーは 2 つの引数を取ります。1 つ目はコンテキスト、2 つ目はモデルです。コントローラーを明示的に設定するのではなく、この方法を使用し、モデルのコントローラーの命名規則に従うことをお勧めします。

ここでドキュメントを見つけることができます: http://emberjs.com/guides/templates/rendering-with-helpers/#toc_the-code-render-code-helper

ビューからのコントローラーへのアクセスも、このディスカッションで追跡されていました: https://github.com/emberjs/ember.js/issues/1712#issuecomment-31183940

于 2013-12-24T21:21:32.337 に答える