2

アプリケーションの名前空間を宣言したとしましょう:

App = Ember.Application.create();

その後、オブジェクトを作成する arrayController インスタンスを作成し、それをユーザー イベントでアプリの名前空間にフックします。

App.objController = Ember.ArrayController.create({
    content: [],

    createObj: function(){
        // instantiate new object
        var newObj = Ember.Object.create({ ... })
        //give obj a name
        var newObjName = this._getObjName( someParam );
        // hook object to an app namespace -> this is where I have an issue
        App[newObjName] = newObj
   },

   ...

});

App[newObjName] = newObj を明示的に使用して、オブジェクトを名前空間にフックします。理想的には、後で別のアプリケーションに objController を使用する場合に備えて、アプリケーションの名前空間に名前を付ける何らかの汎用的な方法が必要です。

私はEmberに遭遇するほど十分に精通していませんが、これを行うには何らかの方法が必要です.

注: JFGI の 1 段階評価では、この質問は絶対に 1 ではありません。

4

2 に答える 2

1

injections依存関係を追加するための推奨される方法である、の使用を検討してください。

Ember.Application.registerInjection({
  name: 'fooObject',
  before: 'controllers',

  injection: function(app, router, property) {
    if (property === 'FooObject') {
      app.set('fooObject', app[property].create());
    }
  }
});

したがって、クラスを次のように定義すると、次のようになります。

App.FooObject = Ember.Object.extend({ 
  // ...
});

インジェクションにより、にインスタンスが作成されApp.fooObjectます。名前空間はまだ使用していますAppが、1回だけです。さらに行うことができます:

Ember.FooObject = Ember.Object.extend({ 
  // ...
});

そしてあなたのアプリで、App.FooObject = Ember.FooObjectしかしそれが有用かどうかはわかりません。

于 2012-10-04T22:44:44.963 に答える
1

初期化段階で、Ember はすべてのコントローラーをインスタンス化し、それぞれに「ターゲット」、「コントローラー」、「名前空間」の 3 つのプロパティを挿入します。「namespace」プロパティはアプリケーションです。

そうは言っても、トップレベルのオブジェクトをハードコーディングする代わりに:

App[newObjName] = newObj

次のことができます。

this.get("namespace").set(newObjName, newObj);

注 - これを機能させるには、アプリケーションにrouterが必要です。また、インスタンスではなくコントローラー クラスを定義する必要があります。Ember はすべてのコントローラーをインスタンス化します。したがって、この

App.objController = Ember.ArrayController.create({/* code here */});

次のように書く必要があります

App.ObjController = Ember.ArrayController.extend({/* code here */});

「ObjController」の大文字「O」に注意してください。

于 2012-10-12T08:27:34.123 に答える