我正在使用很棒的插件infinity-loader。它工作得很好,只要我在它绑定的路线的模板上使用它。
但像很多人一样,现在我决定尝试在组件上使用它。哦亲爱的。我了解如何冒泡/发送像这个小提琴节目这样的动作,这个问题解释了。
奇怪的是,在第一页之后,Infinity 附加组件会触发动作 infinityLoad - 如果我在组件中删除我的处理程序,那么我会在控制台中看到错误“没有处理”动作,所以我知道动作当我滚动到列表末尾时正在触发。
但是当我的组件“冒泡”时,它似乎只是被吞没在路由中,并且不会导致插件触发它自己的内部处理程序。
/templates/employees/index.hbs
{{employees-list employeeModel=model sendThisAction='infinityLoad'}}
/routes/employees/index.js
import Ember from 'ember';
import InfinityRoute from "ember-infinity/mixins/route";
export default Ember.Route.extend(InfinityRoute, {
totalPagesParam: "meta.total",
model() {
return this.infinityModel("employee", { perPage: 10, startingPage: 1 });
},
// is this really needed, because my understanding is this action is automatically handled by the addon?
actions: {
infinityLoad() {
this.get('infinityModel').loadMore();
}
}
});
/templates/components/employee.hbs
<div class="list-group">
{{#each employeeModel as |employee|}}
<...display some employee stuff ...>
{{/each}}
</div>
{{infinity-loader infinityModel=employeeModel}}
/components/employee-list.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
infinityLoad() {
this.sendAction('sendThisAction');
}
}
});
注意我还尝试使用来自 Dockyard 的这个很棒的附加组件 来解决这个问题,用于向路由发送操作。插件有效,但不是我的代码。
更新
使用下面的代码,事件现在会冒泡,当我滚动页面时,我会收到警报。但是现在我需要弄清楚如何让加载器(基本上是路线的孙子)来加载下一页。
/templates/employees/index.hbs
{{employees-list employeeModel=model infinityLoad='infinityLoad'}}
/routes/employees/index.js
import Ember from 'ember';
import InfinityRoute from "ember-infinity/mixins/route";
export default Ember.Route.extend(InfinityRoute, {
totalPagesParam: "meta.total",
model() {
return this.infinityModel("employee", { perPage: 10, startingPage: 1 });
},
// is this really needed, because my understanding is this action is automatically handled by the addon?
actions: {
infinityLoad() {
alert('here we are'); <- test
}
}
});
/templates/components/employee.hbs
<div class="list-group">
{{#each employeeModel as |employee|}}
<...display some employee stuff ...>
{{/each}}
</div>
{{infinity-loader infinityModel=employeeModel}}
/components/employee-list.js
import Ember from 'ember';
export default Ember.Component.extend({
actions: {
infinityLoad() {
this.sendAction('infinityLoad');
}
}
});
这有助于弄清楚那部分。