所以问题是,我试图从 JSON 数据文件(大约 5000 个条目)中加载相当多的条目到表行中,我想知道处理分页的最佳方法是什么。
我知道 jPages 和其他插件,但由于我对 Ember.js 还很陌生,所以我想知道是否有一种 Ember 方法可以完成这项工作。我可以考虑传递条目的总数,手动循环渲染一个设定的数量,但我认为这对于我需要分页的其他区域来说不是很便携。
我应该研究路由吗?
所以问题是,我试图从 JSON 数据文件(大约 5000 个条目)中加载相当多的条目到表行中,我想知道处理分页的最佳方法是什么。
我知道 jPages 和其他插件,但由于我对 Ember.js 还很陌生,所以我想知道是否有一种 Ember 方法可以完成这项工作。我可以考虑传递条目的总数,手动循环渲染一个设定的数量,但我认为这对于我需要分页的其他区域来说不是很便携。
我应该研究路由吗?
所以我转向创建一个看起来有点像这样的mixin
App.PaginationHelper = Em.Mixin.create({
pageSize: 10,
totalLines: 20,
rangeStart: 1,
rangeStop: function () {
var rangeStop = get(this, 'rangeStart') + get(this, 'pageSize') - 1;
totalLines = get(this, 'totalLines');
if (rangeStop < totalLines) {
return rangeStop;
}
return totalLines;
}.property(),
currentPage: function () {
return get(this, 'rangeStop') / get(this, 'pageSize');
}.property(),
totalPages: function () {
return Math.ceil(get(this, 'totalLines') / get(this, 'pageSize'));
}.property(),
[...]
依此类推,然后为它创建一个单独的视图,因为这样我可以重用它,甚至可以在单个页面上多次重用它,方法是创建一个具有唯一 id 的容器 div 来附加要附加到的视图的每个实例化.
所以我可以用新变量重复下一行,但通过保持 templateName 相同来重用模板。
var firstCaseOfPaginationViews = Em.View.create({
templateName: 'pagination'
[...]
});
firstCaseOfPaginationViews.appendTo('#transaction_pagination');
现在,mixin 现在可以简单地包含在我需要分页的任何控制器中。我希望这是在 Ember 中做事的正确方式,看起来这将是我将采用的方式,直到我稍后重构和重新访问。
如果您研究路由,您可以做类似的事情(只是一个概念,不确定这是否是正确的方法)
App = Ember.Application.create({
Router : Ember.Router.extend({
root : Ember.Route.extend({
pages : Ember.Route.extend({
route : '/page/:pageNo',
deserialize : function (router, params) {
var pageNumber = params.pageNo;
var contentToBeShown = //slice the relevant-
//part from your content according to pageNo
<active>Controller.connectOutlet({
name: 'controllername',
outletName: 'outletshowingpages',
context: //theslicedarray
});
}
//add serialize also
})
})
})
});
App.initialize();
更多路由在这里:https ://github.com/emberjs/ember.js/blob/master/packages/ember-routing/lib/router.js