2013-02-04 2 views
6

현재 자바 스크립트 파일을 구성하고 코드에 대한 깔끔한 구조를 만드는 방법으로 백본을보고 있습니다.Backbone.js 유틸리티

내 질문은 주로 "모범 사례"질문입니다.

라이브러리는 훌륭하게 작동하며 AMD와 requirejs로 내 구조를 성공적으로 설정했습니다. 내 질문은 내가 실행중인 몇 가지 유틸리티 파일과 관련이 있습니다. 하나는 XML 문서에서 데이터를 가져와 json 데이터 객체로 변환합니다 (데이터를 지역화 할 수 있음). 다른 하나는 Facebook에로드하고 연결하는 유틸리티입니다. 나는이 두 모델을 모두 '모델'로 만들었습니다.

아마도 이러한 모델은 서비스에 연결될 때 "컨트롤러"일 수 있지만 라우터 (또는 컨트롤러) 파일에서 hashbang을 탐색 할 필요없이 호출해야합니다.

이 두 유틸리티 파일의 백본 모델을 확장해야합니까? 아니면 이와 유사한 유틸리티 파일을 구현해야하는 다른 것이 있습니까?

+0

큰 질문! 이것은 내가 찾고 있었던 바로 그 것이다. 그것이 닫힌다는 어리 석다. – Kieveli

답변

6

객관적으로Backbone.Model을 사용하는 것으로 잘못되었지만, 어쨌든 비린내 느낌입니다. 모델에는 "서비스"또는 "유틸리티"유형 클래스에 속하지 않는 여분의 수화물이 함께 제공됩니다.

대신 Backbone Model-View-Collection-Router 패러다임에 맞지 않는 기능을 위해보다 일반적인 범용 이벤트 클래스를 정의했습니다. 이 extend 에드 될 수 있다는 점에서

define(['backbone', 'underscore'], function(Backbone, _) { 

    var Class = function() { 
    this.initialize.apply(this, arguments); 
    }; 

    //give Class events and a default constructor 
    _.extend(Class.prototype, Backbone.Events, {initialize: function() {}}); 

    //copy the extend feature from one of the backbone classes 
    Class.extend = Backbone.Model.extend; 

    return Class; 
}); 

클래스는 다른 백본 객체처럼 동작, 그 인스턴스는 initialize 생성자 메서드를 가지고 있고 이벤트를 지원합니다. 귀하의 예 중 하나 인 현지화 서비스는 같은 것을 볼 수 있었다 다음에 http://addyosmani.github.com/backbone-fundamentals/

오른쪽 : 애디 오스 마니에 의해 "Backbone.js 응용 프로그램 개발"무료 backbone.js 전자 책이 있습니다

var LocalizationService = Class.extend({ 
    initialize: function(url) { 
    this.url = url; 
    this.fetch(); 
    }, 

    fetch: function({ 
    var self = this; 
    $.ajax({ 
     url:this.url, 
     success: function(response) { 
     self.response = response; 
     self.trigger('fetch:complete', self, response); 
     //etc... 
     } 
    }); 
    } 
}); 
+0

이것은 정확히 내가 찾던 것이었다. 많은 감사합니다! :-) –