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 回答