2013-03-06 117 views
1

我一直試圖在emberjs中實現延遲加載,請按照以下答案:https://stackoverflow.com/a/11925918/341358。但是當ember加載初始數據集時,我卡住了。出於某種原因,第一次ajax呼叫保持呼叫:/newsitems而不是隻有第一頁:/newsitems?page=1。從那時起,loadmore功能起作用,返回第2,3,4頁的有限數據集...在emberjs中延遲加載的問題

所以我的問題是:如何確保只有第一頁的項目是加載,而不是所有的人一次?

這裏是我的路由是怎麼樣子:

App.NewsitemsRoute = Ember.Route.extend({ 
    model: function() { 
    return App.Newsitem.find(); 
    } 
}); 

這裏是我的控制器:

App.NewsitemsController = Ember.ArrayController.extend({ 
    currentPage: 1, 

    canLoadMore: function() { 
    return this.get('currentPage') < 10; 
    }.property('currentPage'), 

    loadMore: function() { 
    if (this.get('canLoadMore')) { 
     this.set('isLoading', true); 
     var page = this.incrementProperty('currentPage'); 

     this.get('store').findQuery(App.Newsitem, {page:page}); 
    } 
    else 
    { 
     this.set('isLoading', false); 
    } 
    } 
}); 

回答

1

你可以改變你的路線,包括1默認頁是多少?

例如

App.NewsitemsRoute = Ember.Route.extend({ 
    model: function() { 
    var controller = this.controllerFor('Newsitems'); 
    return App.Newsitem.find({page: controller.get('currentPage')}); 
    } 
}); 

編輯:如果您從控制器獲取頁碼,該怎麼辦?

+0

很棒的建議,但我已經嘗試過此之前。這確保了對後端的第一次調用是:'/ newsitems?page = 1',但是調用下一頁不會更新視圖。我可以看到對後端的調用如下所示:'/ newsitems?page = 2',但視圖不斷顯示前幾項。任何想法可能會導致這種情況? – polyclick 2013-03-07 10:50:02

+0

這似乎是多餘的,因爲您已經從控制器內部啓動了一個'findQuery',但是當您從控制器中獲取頁碼時發生了什麼? – Ben 2013-03-07 16:11:25

+0

與之前一樣:第一次調用/ newsitems?page = 1,第二次調用:/ newsitems?page = 2。太棒了!但是,我的觀點沒有更新,所以新的記錄永遠不會顯示在頁面上。 – polyclick 2013-03-07 17:12:08