2011-10-17 2 views
4

내 백본 모델 중 하나와 관련된 데이터를 반환하도록 webservice를 호출하는 경우 일반적인 질문입니다. 모델 자체 내에서 webservice를 호출하는 것이 더 좋을까요, 아니면 초기화시 WS의 결과를 모델에 전달해야할까요?Backbone.js 모델 데이터 검색

내 모델에서 WS 호출을 통합하는쪽으로 기울어 져 있지만 분명히 대기 시간 문제가 발생할 수 있습니다.

그렇다면이 데이터 검색을 처리하는 가장 좋은 장소는 어디입니까?

답변

4

HTML을 렌더링하는 페이지가 모델에 들어갈 데이터를 이미 알고 있다면 데이터를 모델 생성자로 바로 렌더링하는 것이 좋습니다. (레일즈 뷰를 가정했을 때 그림의 목적을위한 것임) :

컨트롤러에서 일부 JSON 데이터를 @modelData으로 렌더링했다고 가정 해 봅시다.

var modelData = <%= @modelData %>; 
var model = new TheModel(modelData); 

이렇게하면 데이터를 즉시 수신 할 수 있으며 두 번째 전화를 다시받을 필요가 없습니다. 나는이 접근 방식을 여러 번 사용하여 많은 성공을 거두었 다. 백 엔드가 클라이언트에 반환 가져옵니다 HTML이나 JS의 데이터를 렌더링되기 때문에 편집

이에 확장하려면

,이 서버에 적은 수의 호출을 초래한다. 위의 코드의 결과 (후 뷰 렌더링)이 같은 수 있습니다 :

var modelData = {id: 5, first: "Collin", last: "Estes" }; // populated in first server call 
var model = new TheModel(); 

그것을하는 다른 방법은, 그러나, 당신은 서버에 두 개의 통화를 할 경우

var model = new TheModel({id: 5}); 
model.fetch(); // results in second server call 

을 서버에 대한 첫 번째 호출은 코드를 반환하는 호출입니다. 두 번째는 가져 오기를 호출 할 때 발생합니다.

다른 문의 사항이 있으면 사과드립니다. "이 전화를 처리 할 수있는 가장 좋은 곳은 어디입니까?"라는 의미를 분명히 할 수 있습니다.

+1

+1 JS 모델의 초기 값을 설정하는 방법입니다. - 서버에 대한 호출이 적 으면 사용자의 웹 페이지가 더 빠릅니다. JS에서 복잡한 데이터 구조를 지정하기 위해 (보기에서) JSON으로 출력 할 수 있다는 것을 기억하십시오. –

+0

나는 잘 모르겠다. 왜 이것이 서버 호출 횟수를 줄이는 것입니까? 내 서버에 동일한 양의 호출을해야 할 것입니다.이 호출을 처리하는 가장 좋은 장소는 어디인지 궁금합니다. Brian이 내 모델을 인스턴스화하기 전에 해당 모델을 처리하고 생성자와 함께 필요한 모든 데이터를 전달해야한다고 말하고 있습니까? –

+0

@CollinEstes 필자는 필자의 대답을 확장하여 왜 서버 호출 수가 줄어들 었는지 설명했습니다. 나는 당신의 질문을 오해 할 수도 있습니다. –

1

올바른 방법은 모델을 먼저 만든 다음 model.fetch을 사용하여 데이터를 가져 오는 것입니다. 그렇게하면 모든 아약스 로직이 Backbone.sync에 통합됩니다.

HTML을 렌더링 할 때 데이터를 쉽게 사용할 수 있다면 캐시 (예 : sessionStorage)에 넣고 동기화 코드에서 캐시를 읽고 쓸 수 있습니다. 그런 식으로 HTML 렌더링에서 웹 서비스 호출을 이동해야하는 경우 (예 : 응용 프로그램 캐시를 사용하는 경우), 주요 리팩토링을 수행 할 필요가 없습니다.