3

すべての電子メールを保存する EmailsController (ArrayController) があります。実際の電子メールが選択されているかどうかを格納するパラメーターを持つ EmailController (ObjectController) があります。すべてのメールを選択または選択解除するボタンをメール テンプレートに実装しようとしています。どういうわけか、EmailsController のアクションを介して EmailController に通知し、EmailController の isChecked パラメータを変更する必要があります。

itemController、needs、および controllerBinding パラメーターを使用しようとしていますが、何も機能しません。

コントローラーは次のとおりです。

App.EmailsController = Ember.ArrayController.extend({
    needs: ["Email"],
    itemController: 'Email',
    checkAll: true,
    actions: {
        checkAllEmails: function() {
            this.toggleProperty("checkAll");
            console.log(this.get("checkAll"));
        } 
    }
});


App.EmailController = Ember.ObjectController.extend({
    needs: ["Emails"],
    controllerBinding: 'controllers.Emails',
    isChecked: true,
    checkAllChanged: function() {
        //this should execute, but currently it does not
        this.set("isChecked",this.get('controller.checkAll'));
    }.property("controller")
});

対応する jsFiddle は次のとおりです: http://jsfiddle.net/JqZK2/4/ 目標は、[すべてをチェック] ボタンを使用してチェックボックスの選択を切り替えることです。

ありがとう!

4

2 に答える 2

3

親コントローラーからプロパティを変更して、電子メールを反復処理することができます。needs変数を指定または監視する必要はありません。

App.EmailsController = Ember.ArrayController.extend({
    itemController: 'email',
    actions: {
      checkAllEmails: function() {
        this.forEach(function(email) {
          email.toggleProperty("isChecked");
        });
      } 
    }
});

また、通常は のように初期値を設定しませんisChecked = true。プロトタイプに静的共有プロパティを作成していると思います(意図したものではありません)。代わりに、init でプロパティを設定するか、元の json データから渡します。

コードを参照してください: http://jsfiddle.net/JqZK2/5/

于 2014-04-18T05:06:46.333 に答える