일부 사용자를 보유하고 있습니다. 필요한 몇 가지 정보는 전체 페이지 수, 페이지 수 등입니다. 어떻게 이러한 정보를 클라이언트로 다시 전달합니까? 또는 그들은 별도의 견해에서 왔어야 하나 이상의 아약스 전화가 필요할 것입니다. 컬렉션 fetch()
을 갖고 싶고이 "메타 데이터"중 일부를 받고 싶습니다. 이것을 처리하기위한 좋은 방법은 무엇입니까?backbone.js - 요청과 함께 추가 데이터 받기
답변
여기에, 당신은 컬렉션 클래스에서이 문제를 처리해야 '구문 분석 https://github.com/ichbinadrian/maps/blob/master/templates/index.html <가 방법. 책임은 응답을 받고 일련의 모델 속성을 반환하는 것입니다. 그러나이 추가 책임이있는 구문 분석 방법에 신경 쓰지 않았다면 원하는 경우보다 더 많은 작업을 수행 할 수 있습니다.
UserList = Backbone.Collection.extend({
model: User,
url: '/users',
parse: function(data) {
if (!data) {
this.registered_users = 0;
return [];
}
this.registered_users = data.registered_users;
var users = _(data.users).map(
function(user_data) {
var user = {};
user['name'] = user_data.name;
return user;
}
);
return users;
}
});
그래서 상기 단순 예에서, 서버는 등록 된 사용자와의 수와 사용자 속성들의 어레이를 포함하는 응답을 반환 추정. 구문 분석하고 사용자 특성을 반환하고 등록 된 사용자 수를 선택하여 모델의 변수로 설정하면됩니다.
구문 분석 메서드는 가져 오기의 일부로 호출됩니다. 가져 오기를 수정할 필요가 없으므로 보유하고있는 기본 제공 후크 방법을 사용하십시오.
청중들은 구문 분석 방법에 일부 사용자를 놀라게 할 수있는 2 차적 책임을 부여한다고 말합니다 (예 : 반환 및 모델 상태 수정). 그러나 이것은 괜찮다고 생각합니다.
이 작업을 수행하는 한 가지 방법은 Collection::fetch()
메서드를 재정 의하여 응답에서이 메타 데이터를 구문 분석하도록하는 것입니다. 당신은 당신의 백엔드이 같은 응답을 반환 할 수 :
Backbone.Collection::fetch()
방법보다 우선
fetch
방법에서
{
"collection": [
{ ... model 1 ... },
{ ... model 2 ... },
...
],
"total_rows": 98765,
"pages": 43
}
, 당신은 별도로 개체의 각 속성을 처리 할 수 있습니다. 다음은 약간 수정 fetch
방법으로 재정의 할 수있다 : _.extend
를 사용하여이 방법은 Backbone.Collection
을 확장 모든 수업에 영향을 미칠 것
_.extend(Backbone.Collection.prototype, {
fetch : function(options) {
options || (options = {});
var collection = this;
var success = options.success;
options.success = function(resp) {
// Capture metadata
if (resp.total_rows) collection.total_rows = resp.total_rows;
if (resp.pages) collection.pages = resp.pages;
// Capture actual model data
collection[options.add ? 'add' : 'refresh'](
collection.parse(resp.collection), options);
// Call success callback if necessary
if (success) success(collection, resp);
};
options.error = wrapError(options.error, collection, options);
(this.sync || Backbone.sync).call(this, 'read', this, options);
return this;
});
참고.
이렇게하면 백엔드에 2 번의 개별 호출을 할 필요가 없습니다.
나는이 문제를 해결하기위한 올바른 접근 방법이라고 생각하지 않는다.대신, 당신은 물어 보는 것을 성취하기 위해 후크 방법 안에서 살고 싶습니다. 파스는 이런 종류의 일에 적절한 장소 중 하나 인 것처럼 보입니다. 프레임 워크 메서드를 재정의하면 backbone.js를 업그레이드 할 때 예상대로 작동하지 않거나 해당 메서드에 할당 된 새로운 기능을 사용할 수없는 위험이 있습니다. –
맞습니다. 일반적으로 프레임 워크 프로토 타입을 상속하는 모든 메서드에 영향을 미치고 싶지는 않습니다. 어떤 이유로 나는 OP가 모든 콜렉션 클래스에서이 기능을 원했고 프레임 워크 메소드를 오버라이드하는 것이 편리한 방법이라고 생각했다. 'parse' 메쏘드는 어쨌든 이것을하기에 더 좋은 곳으로 보입니다. – Sam
정보를 페이지 매기기로 부트 스트랩합니다. 서버가 사이트를 생성 할 때 html 문서에 정보를 씁니다. 아약스 전화를 전혀하지 않아도됩니다. 먼저 전체 페이지를로드하지 말고 아약스 호출이 필요한 정보를 반환 할 때까지 대기하지 않도록 ordner의 전체 콜렉션을 사용합니다.
코드 파이썬 예 :
행 64 : https://github.com/ichbinadrian/maps/blob/master/python/main.py < - 여기
행 43 : - 일반적으로
- 1. Backbone.js 이벤트 문제 추가
- 2. backbone.js 데이터 링크
- 3. Backbone.js save() 후 서버에서 응답 받기
- 4. CSLA 원격 데이터 포털에서 IP 주소 받기
- 5. backbone.js 컬렉션에 메타 데이터 유지 및 로딩
- 6. 함께 데이터 테이블에 행을 추가 parallel.for
- 7. Backbone.js 마스터 - 세부 시나리오
- 8. Backbone.js -보기가 활성화되었을 때 keydown 이벤트 추가?
- 9. RDS와 함께 작동하도록 JNDI 받기
- 10. Sinatra로 헤더 데이터 받기
- 11. C# 패킷 데이터 받기
- 12. WinPCap 데이터 잘림 받기
- 13. 오디오 버퍼 데이터 받기
- 14. Backbone.js 및 jquery.datalink.js 사용
- 15. iOS에서 AVAudioRecorder와 함께 작동하는 헤드셋 마이크 받기
- 16. 모든 Ajax 요청과 함께 자동으로 활동 로더를 표시하는 방법은 무엇입니까?
- 17. VB.NET에서 내 GET 요청과 함께 쿠키를 보내려면 어떻게해야합니까?
- 18. PHP가 요청과 함께 PHPSESSID 쿠키를 보내지 않도록 하시겠습니까?
- 19. 당사자 쿠키가 자사 웹 페이지의 이미지 요청과 함께 전송됩니까?
- 20. IIS가 비동기 요청과 함께 각 응답 사이에 많은 시간을 지연합니다.
- 21. Backbone.js 오프라인 사용
- 22. 는 backbone.js
- 23. Backbone.js 범위
- 24. POST 요청과 Nerve가없는 Node.js
- 25. JSON 요청과 장고 응답
- 26. backbone.js 앱보기가 이상한 동작
- 27. Ajax - 별도의 데이터 라인 받기
- 28. Java MMO로 클라이언트에 데이터 받기
- 29. XML 데이터 보내기 및 받기
- 30. ITAPI3 데이터 보내기 및 받기
자세한 정보를 제공해 주시겠습니까? 서버는 어떻게 생겼습니까? 어떤 브라우저를 지원해야합니까? 얼마나 자주 데이터를 얻습니까? – tjameson
@tjameson 제 서버는 PHP를 사용하는 nginx입니다. 특정 브라우저를 지원할 필요가 없습니다 (원하는 경우 Chrome 및 Firefox 지원). 나는 데이터를 상대적으로 자주 얻는다. (단지 공정한 작업이다.) 그래서 페이지 번호를 바꾸거나 빠른 검색 등을한다. – Matthew