우리는 웹 어플리케이션을 만들기 위해 EmberJs를 사용합니다. 총 100 개의 항목 중에서 각각 5 개의 항목을 표시하는 페이지 매김 코드가 있습니다. 모두 100 개의 항목이 단일 API 호출에서 가져오고 배열로; '모델'로 전달됩니다. 컨트롤러는 페이지 번호 및 페이지 크기를 기반으로 배열을 분할합니다.엠버를 이용한 다이내믹 페이지 네이션
프레임 워크를 동적으로 만들고 싶습니다. 즉, 페이지 번호 및 페이지 크기 입력으로 서버에 API 호출을 보내야하고 각 다음 페이지 클릭에 대해 특정 응답을 받아야합니다.
내 코드는 여기에 있습니다.
라우터 :
App.AccountPointsRoute = Ember.Route.extend({
totalTransactions: null,
model: function(params) {
var page = this.controllerFor('accountPoints').get('page');
var pointsURL= App.config.getEndpoint()+'/account/points';
var getUserDetailsForViewUserAccount = function(){
if(params.email){
return Ember.$.getJSON(App.config.getEndpoint()+'/admin/userInfoByEmail?email='+params.email).then(function(data){
return data.payload.user.totalPoints;
})
}
}
var transactionURL = App.config.getEndpoint()+'/account/transactions?page='+page+'&pageSize=2&raceId=0&selectedDate='+ App.current_month() +'%20'+App.current_year();
if(params.email){
pointsURL = App.config.getEndpoint()+'/admin/points?email='+params.email;
transactionURL = App.config.getEndpoint()+'/admin/transactions?page=1&pageSize=100&raceId=0&selectedDate='+ App.current_month() +'%20'+App.current_year()+'&email='+params.email;
}
var self = this;
return Em.RSVP.hash({
points: Ember.$.getJSON(pointsURL).then(function(data){
return data.payload;
}),
transactions: Ember.$.getJSON(transactionURL).then(function(data){
self.set('totalTransactions', data.payload.totalRecords)
return data.payload.logs;
}),
userPoints:getUserDetailsForViewUserAccount(),
});
},
setupController: function(controller, models) {
controller.set('points', models.points);
controller.set('transactions', models.transactions);
controller.set('userPoints',models.userPoints);
controller.set('model', models.transactions);
controller.set('totalRecords', this.get('totalTransactions'));
}
});
그리고 이것에 대한 컨트롤러는 I 페이지 번호 특정 응답을 얻을 수있는 '페이징'방법 내부 API 호출을 만들기 위해 코드에 무엇이 필요합니까
App.AccountPointsController = App.PaginationController.extend({
needs:['application'],
queryParams:['email', 'page'],
page : 1,
pageSize: 5,
numPages: function() {
var pageSize = this.get('pageSize'),
//l = this.get('length');
l = this.get('totalRecords');
console.log("numPages "+ Math.ceil(l/pageSize));
return Math.ceil(l/pageSize);
}.property('pageSize','length'),
paged: function() {
var page = this.get('page');
var transactions = this.get('model');
var page = this.get('page') - 1,
pageSize = this.get('pageSize'),
start = page * pageSize,
end = start + pageSize
length = transactions.get('length');
transactions = transactions.slice(start,end);
this.set('length', length);
return transactions;
}.property('email', 'page', 'model', 'pageSize','pages'),
});
서버에서. 답변을 기다리겠습니다.
솔루션을 주셔서 감사하지만 그것은 나를 위해 작동하지 않았다. 내 pagination.hbs는 귀하가 제안한 것과 동일한 방식이었으며 다른 변경 사항도 추가했습니다. 그러나 refreshModel : true를 사용했지만 페이지가 변경되거나 쿼리 매개 변수가 변경되면 모델이 새로 고쳐지지 않습니다. 이 문제를 해결할 수 있습니까? –
정확히 무엇이 잘못 되었나요? 페이지가 변경 될 때 서버에 신선한 AJAX 호출을하지 않습니까? 전화를 걸었지만 답장을 처리하지 않습니까? [This] (http://jsbin.com/hiyalu/edit?html,css,js,output)는 서버 측 정렬을 수행하는 방법의 예입니다. 어쩌면 도움이 될 것입니다. –
JSBin 스 니펫을 살펴 봤습니다. didQueryParamsChange를 시도해 보았습니다. 그것은 내 문제를 해결했다. 나는 당신의 대답을 편집하고 받아 들일 것입니다! –