0

私のEmberアプリにはArrayController、メソッドを作成した内部があります:

App.SwatchesController = Ember.ArrayController.extend({
  push: function (color) {
    var model = this.get('model');
    /* do a few things */
    this.set('model', model);
  }
});

内のアクションからこのメソッドを呼び出そうとするとApplicationCotroller、次のようになりますTypeError

App.ApplicationController = Ember.Controller.extend({
  actions: {
    parse: function () {
      App.SwatchesController.push('#fff'); // TypeError: Object function (){/* long body here */} has no method 'push' 
    }
  }
});

コントローラ メソッドは Ember で使用する必要があるものですか? 残念ながら、公式ドキュメントはコントローラーの限られた例しか提供していません。

おそらくモデルを として定義App.Swatchesし、 から直接管理することもできますApplicationControllerが、そうすべきではないと思いSwatchesControllerます。

デモ: http://jsbin.com/UToDazI/3/edit?html,js,output

4

3 に答える 3

2

で次のコードを使用してみてくださいApplicationController

App.ApplicationController = Ember.Controller.extend({
    needs: "swatches",
    swatchesController: Ember.computed.alias("controllers.swatches"),
    actions: {
        parse: function () {
            var swatchesController = this.get('swatchesController');
            swatchesController.push('#fff');
        }
    }
});

コントローラー間の依存関係の管理については、こちらで説明しています。

于 2013-10-10T08:41:05.550 に答える
0

メソッドを呼び出す前にコントローラーをインスタンス化する必要があります...コードでは、App.SwatchesControllerはインスタンスではなく、他のクラスから拡張されたクラスです...

何かのようなもの

App.swatchesController = App.SwatchesController.create({});

そして、インスタンス化されたコントローラーでメソッドを呼び出すことができます。

  parse: function () {
     App.swatchesController.push('#fff'); 
  }
于 2013-10-10T08:40:44.997 に答える