2

アプリケーションをEmberv1.0.0pre3からrc1に移行していますが、グローバルルーターインスタンスを取得できなくなっているようです。また、手動で作成したビュー内にコントローラーを取得することもできません。

現在ルートを使用していないモーダル画面(TODO)がいくつかありますが、今週の締め切りには、これらのモーダルを表示して入力する必要があります。

私は次のようなモーダルを作成しています:

App.helpModalView = App.HelpModalView.create();
App.helpModalView.append(); 

ビューのdidInsertElementメソッドでモーダル表示を処理します。

didInsertElement: function() {
   // miscellaneous setup operations
   // ...
   this.$().modal({backdrop:"static"});
},

しかし、実際のビュークラス内

this.get('controller') == null

さまざまなオブジェクトを調べると、「controllerFor」はルーターでのみ使用可能であるように見えます。以前は、App.router.get('controllerName')からこの情報を取得していました。

プログラムで作成されたビューからコントローラーを取得するにはどうすればよいですか?

同様に、まだアクセスしていないビューのコントローラーを提供するための最良の方法は何ですか?このプロジェクトには、ビューレイヤーに困惑する量のロジックがあり、関連するコントローラーにプッシュしたいと思います。

4

2 に答える 2

1

私は同様のシナリオを持っていて、次のように解決しました:

            IB.TreeNavController = Em.Controller.extend({
                container: IB.__container__,
                init: function() {
                  this._super();
                }              
            });

            IB.TreeNavView = Em.View.extend({
                templateName: 'treeNav',

                init: function() {
                    this._super();
                    var ctrl = IB.TreeNavController.create();
                    this.set('controller', ctrl);
                },
            });

そこで、ビューのinit()でインスタンス化されるコントローラーを定義しました。ビューはプログラムでインスタンス化できます。この例では、IBはアプリの名前です。

于 2013-03-06T10:17:11.967 に答える
0

このようなものをレンダリングする場合:

 this.render('treeNav', { controller: this.controllerFor('treeNav')};

this.controllerFor必要なものなら何でもかまいません。まだどのビューにも割り当てられていないものでもかまいません。

于 2013-03-20T16:26:07.693 に答える