2012-06-15 8 views
0

나는 백본에 익숙하지 않고 몇 가지 튜토리얼 앱을 통해 첫 번째 앱을 사용해 본다.Backbone.js 맞춤 휴식 경로

내가 모델 이름 사업이

을 백엔드에

다음 (레일)를 달성하는 가장 좋은 방법이 무엇인지 궁금 해서요, 그것은 속성의 많은 복잡한 모델, 그것은 가지고있다 관련 주소 (has_one :address)이며 아바타와 다른 프로필 피처와 기타 정보가 더 있습니다.

내 프론트 엔드에서 비즈니스 프로필의 특정 부분을 가져오고 업데이트 할 수 있기를 원합니다. 프로필 사진을 업데이트 할 수 있기를 원하는 것보다 이름, 범주 및 주소가 포함 된 basic_info 만 가져 오려고합니다. 및 아바타. 내가 백본에서 본 것을

모델이

을 파괴, 방법은 패치, 업데이트, 저장 가지고 있다는 것입니다 내가 fetch_basic_info, fetch_profile_picture, update_profile_picture 같은 다른 방법을 원하는 경우에는 어떻게? 그리고 이것들에 대해서 나는 관련 뷰가 그에 따라 알리고 싶다. 내가

가지고 올 것을 여기

은 내가 보내기 함수 내에서 백본 모델

  • 에 함수 fetch_basci_info를 추가 기본 정보

    • 을 인출하려는 말할 수있다 서버에 $.ajax을 사용하여 사용자 정의 아약스 요청

    • 수동으로 이벤트을 트리거하십시오. 내 라우터 기능 내부
    • 는 새로운 뷰도 모델의가 있습니다 바인딩 BasicInfoView 말을하고 그것을 뷰 내부의 모델 객체
    • 을 건네 줄 수가 있습니다 만들 모델 객체
    • 를 만들 라우터 초기화시 model.bind('basicinfo:fetched', this.render)
    • model.fetch_basic_info (라우터 초기화시)

그래서 라우터는보기 사용자 정의 이벤트를 결합하여 서버 응답 (나는 수동으로 설정 부릅니까 여기 백본 모델의 속성을 설정할 수) 반환에 model.fetch_basic_info() 요청이 전송 호출을 만들어이라고합니다. 그 후 사용자 지정 이벤트 이벤트가 트리거되어 뷰가 알림을 받고 렌더링됩니다.

이것은 내 첫 번째 실제 백본 응용 프로그램입니다.

귀하의 의견은 무엇입니까?

읽고 피드 바크 주셔서 감사합니다.

답변

0

당신이하려는 것은 매우 RESTful하지 않습니다. 리소스 또는 네트워크 대역폭을 절약하기 위해이 작업을 수행하려는 경우에는 수십 또는 수천 개의 필드에 관해서 이야기하지 않는 한 거의 확실한 조기 최적화가 필요합니다.이 경우 더 나은 솔루션이 있습니다.

사실 프로필 사진을 가져 오는 것은 50-100 개의 필드를 가져 오는 것과 거의 같은 리소스를 사용합니다. 네, 약간 더 많은 데이터가 있지만, 작업의 90 %를 차지하는 네트워크 연결의 대기 시간, 리소스 및 대기 시간은 연결 설정으로 인해 실제로 절약되지는 않습니다. 데이터베이스 끝에

플러스하는

select * from businesses where id=123

는 사용하는 작업의 가장 어려운 부분부터

select profilepic from businesses where id=123

이상의

데이터베이스에 연결하는 경우에만 작은 조금 올바른 행을 찾는 것입니다. 그 후, 추가 데이터를 50 개 추가하면 성능이 눈에 띄지 않습니다.

귀하의 모델/테이블에 수백 또는 수천 개의 속성이 포함되어있는 경우에만이 시간이 넘어갑니다. 이 경우 솔루션은 모델을 하위 모델로 분할하는 것입니다. REST를 통해 개별적으로 처리하십시오. 그러나 비즈니스 로직 유형이어야합니다. 예를 들어 Business는 Address, Employee, ShareStructure를 포함합니다.

필자는 조기 최적화 도구였습니다 ... "단 하나의 열만 필요할 때 10 개의 열을 반환하면 안됩니다." 그러나 다양한 조합으로 데이터의 모든 하위 집합에 대해 웹 서비스 API를 작성하려고하면 API를 실제로 사용할 수없고 유지할 수 없게됩니다. 어떤 일도 끝내지 못할 것입니다.

https://graph.facebook.com/cocacola

을하고 사진 속성을 가져 :

당신은 페이스 북의 API 오프 코카콜라의 프로필 사진을 얻기 위해 원하는 말해, 당신은 단지 부를 것이다. 나머지 데이터가 필요 없다면 누가 신경 쓰나요? 그것은 일을 간단하고, 안심하고, 유지하기 쉽도록 유지합니다.

0

내 첫 번째 생각은 이미 백본에서 제공하는 많은 기능을 복제한다는 것입니다. 클라이언트 측에서 비즈니스 모델을 정확히 복제해야하는 이유는 없습니다. 기본 정보, 프로필 등을 별도의 백본 모델로 분해하여 필요에 따라 뷰에 적용 해보십시오.

+0

멋진 아이디어이지만이 모델을 지원하기 위해 백엔드를 작성하지 않겠습니까? – Abid

+0

당신의 접근 방식 이상의 것은 아닙니다. fetch_basic_info, fetch_profile_picture – lecstor

+0

@ reach4thelasers 응답도 고려하십시오. 단일 모델을 보유 할 수 있고 각각의 뷰가 필요에 맞게 수정하고 저장할 수 있다면 클라이언트와 백엔드 모두에서 훨씬 간단 해집니다. 운이 좋으면 나중에 필요할 때 언제든지 최적화 할 수 있습니다. – lecstor