6

Ember Peepcode のビデオを見ているところです。1 つ気になったのは、コントローラーはシングルトンであるため、各コントローラーの単一のインスタンスが実行時に作成され、コントローラーのデータ プロパティが必要に応じてスワップ イン/アウトされることです。

しかし、同じコントローラーの複数のバージョンを画面上に表示し、同時にアクティブにする必要がある場合はどうなるでしょうか。example.handlebars複数のテンプレートがあり、それぞれが独自のバージョンのExampleControllerオンスクリーンで同時にサポートされる必要がある場合はどうなりますか?

Ember はこの状況をどのように処理しますか?

4

2 に答える 2

5

それを処理するにはいくつかの方法があります(私の以前の回答で言及されています)。

方法 1:

{{render}}モデルを使用 (最新の Ember.js ビルドが必要):

{{render "example" example1}}
{{render "example" example2}}

方法 2:

2014 年 7 月 7 日更新: {{control}} Ember >= 1.0 から削除されました。

{{control}}(まだバグがあるので、できれば避けてください)

{{control "example"}}

ただし、最初にフラグを有効にする必要があります: ENV.EXPERIMENTAL_CONTROL_HELPER = trueember.js ファイルをロードする前に。

次のようにして修正する必要があるバグもあります。

App.register('controller:example', App.ExampleController, {singleton: false }

方法 3:

で使用{{each}}itemControllerます。

{{#each controller itemController="example"}}
  {{view "example"}}
{{/each}}

これらはそれぞれ、毎回新しい個別のインスタンスを作成します。

于 2013-03-29T16:52:30.873 に答える
0

私が見つけたのは、コントローラーの init メソッドをオーバーライドし、コンテンツを新しいオブジェクト (または使用しているもの) に設定すると、複数の独立したインスタンスを持つことができるということです。

App.MyMultipleController = Ember.ObjectController.extend({
    content: {},

    init: function(){
        this.set('content', {});
        return this._super.call(this, arguments);
    }
});

これが JSFiddle です。ObjectProxy私自身の目的で を使用していますが、必要に応じて使用できますObjectController: http://jsfiddle.net/jgillick/D83d8/

于 2013-08-07T21:12:45.023 に答える