使用ember数据(如无限滚动)从块中获取服务器中的数据

时间:2016-01-02 10:40:33

标签: ember.js asp.net-web-api

我想显示一个很长的用户列表(是的,我建议分页,但客户端不会接受它),我想一次获取一些记录。

这主要是因为在服务器端创建列表是资源密集型的(每个字段都在数据库中加密< - 再次我无法改变这一点)并且检索1000条记录会减慢应用程序的速度。所以我想显示30条记录并立即获得接下来的30条记录(无限滚动的工作方式相同,无需向下滚动以获取更多记录)。下面是我的路线处理程序:

import Ember from 'ember';

export default Ember.Route.extend({
    model(){
        return this.store.query('user', {
            firstname:'doe' // this comes from a textbox when filtering the list of users
            pageSize:30,
            page:1,
            orderBy:'id'
        });
    }
});

为了让ember和webapi一起玩得很好,我在这里实现了所有内容https://github.com/CrshOverride/ember-web-api

api不返回任何分页信息,但我想继续抓取下一页,直到返回的记录集小于pagesize。

背景:我从角度1迁移到余烬2(非常多的是一个余烬新手),我相信我正在使用余烬数据,我通过ember-cli生成大部分内容

1 个答案:

答案 0 :(得分:1)

这是Ember-Data不提供开箱即用的东西,但很容易自己实现。

// route.js
export default Ember.Route.extend({
    setupController(controller) {
        controller.fetchUsers(someNameOrAnother);
    }
});

// controller.js
export default Ember.Controller.extend({
    fetchUsers(name) {
        this.set('allUsers', []);
        this.fetchUsersHelper(name);
    },

    fetchUsersHelper(name, page = 1) {
        const queryParams = {
            firstname: name,
            pageSize: 30,
            page,
            orderBy: 'id'
        };

        this.store.query('user', queryParams).then((users) => {
            this.set('allUsers', this.get('allUsers').concat(users.toArray()));

            if (users.get('length')>= queryParams.pageSize) {
                this.fetchUsersHelper(name, queryParams.page + 1);
            }
        });
    }
});