0

コントローラのアクションを

actions: {
  loadMore: function() {}
}

これを行うと、以前はコントローラーでアクションを実行する必要があったコードが機能しなくなりました。

Ember.tryInvoke(view.get('controller'), 'loadMore');

これをやり直す適切な方法は何でしょうか?

編集

tryInvoke を使用する完全なコード:

  didInsertElement: function() {
    'use strict';

    var view = this;
    this.$().bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
      if (isInView) {
        Ember.tryInvoke(view.get('controller'), 'loadMore');
      }
    });
  },
4

2 に答える 2

0

Ember.ViewTargetActionSupportを使用して、actionプロパティを必要なアクション名に設定できますloadMore。を使用triggerActionすると、アクションが送信されます。

jquery イベントは ember 実行ループから切り離されているため、triggerAction を Ember.run でラップしました。

App.YourView = Ember.View.extend(Ember.ViewTargetActionSupport, {
  action: 'loadMore',
  didInsertElement: function() {
    'use strict';

    var view = this;
    this.$().bind('inview', function(event, isInView, visiblePartX, visiblePartY) {
      if (isInView) {
        Ember.run(function() {
          view.triggerAction();
        });        
      }
    });
  },
});
于 2013-10-31T13:37:25.970 に答える
0

コントローラーを正しく理解していますか?数か月前の Ember 1.2 のコミットによると、コントローラーは「コントローラー」ではなく「targetObject」としてビューからアクセスできるようになりました。

https://github.com/emberjs/ember.js/commit/326af5a9c88df76f5effe11156a07b64c8b178a3#packages/ember-handlebars/lib/controls/text_support.js

于 2013-10-31T13:37:36.200 に答える