0

最新の emberjs 1.0 pre4 を使用しています。

App.FormController で、childView を containerView に挿入します。

containerView.get('childViews').pushObject(
    App.FieldData4MultipleChoiceView.create()
);

この childView では、「me.get('controller')」を出力しようとしています。

didInsertElement: function() {
    var me = this;
    $(".fieldset.group").on("click", ".fieldChoice img", function(e){
        var controller = me.get('controller');
        console.log(controller); // line A
    });
}

質問 1: なぜ「行 A」は App.ApplicationController クラスのインスタンスを返すのに、App.FormController を返さないのですか?

質問 2: App.FormController の下のビューだけでなく、他のビューで App.FormController の単一のインスタンスを取得するにはどうすればよいですか?

どうもありがとう!

4

2 に答える 2

1

質問 1: なぜ「行 A」は App.ApplicationController クラスのインスタンスを返すのに、App.FormController を返さないのですか?

あなたの例は「App.FormControllerで、childViewをcontainerViewに挿入します」と言っていますが、そのcontainerViewがどのように存在するようになったのか、またはそのコンテキストが何であるかは明確ではありません。その childView は親のコンテキストを継承するため、containerView 自体はApp.FormControllerコントローラーとして持っていないと思います。

質問 2: App.FormController の下のビューだけでなく、他のビューで App.FormController の単一のインスタンスを取得するにはどうすればよいですか?

少なくとも、ember の内部 API を実際にハッキングしない限り、それはできません。これは仕様によるものです。各ビューは非常に軽量で、対応するコントローラーのみに依存する必要があります。そのコントローラーは App.FormController またはそのプロパティの 1 つにバインドできますが、ビューは認識する必要はありません。

于 2013-02-01T04:26:18.893 に答える
0

質問 1: なぜ「行 A」は App.ApplicationController クラスのインスタンスを返すのに、App.FormController を返さないのですか?

コンテキストがビューに渡されない理由はよくわかりませんが、ビューをインスタンス化するときにコントローラーを渡すことで、コントローラーを自分で指定できます。

App.FieldData4MultipleChoiceView.create({ controller: this.get('formController'); });

質問 2: App.FormController の下のビューだけでなく、他のビューで App.FormController の単一のインスタンスを取得するにはどうすればよいですか?

あなたがやっているようにやっているなら、コントローラを通過する必要があります。{{render "my"}}自動的に取り付けられるハンドルバーでMyView使用できますMyController。ただし、この方法で行っていない場合は、次を使用してコントローラーを渡すことができますsetupController

var MyRoute = Ember.Route.extend({
    setupController: function(controller) {
        controller.set('formController', this.controllerFor('form'));
    }
});

これで、インスタンスthis.get('formController')内からアクセスできるようになります。MyController

EMBER 1.0.0-PRE.5this.controllerForではこれ以上ありませんが、代わりに を使用しneedsて任意のコントローラーで必要なコントローラーを指定します。

于 2013-02-01T13:49:23.427 に答える