最新指南声明将控制器操作包装在
中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');
}
});
},
答案 0 :(得分:0)
您可以使用Ember.ViewTargetActionSupport,并将action
属性设置为您想要的操作名称,在这种情况下loadMore
。使用triggerAction
将发送操作。
因为jquery事件与ember run循环分离,所以我将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();
});
}
});
},
});
答案 1 :(得分:0)
你确定你的控制器正确吗?根据几个月前在Ember 1.2中提交的一个提交,现在可以从一个视图访问控制器作为“targetObject”而不是“controller”: