2011-10-12 4 views
0

내부적으로 Backbone.js를 사용하는 jQuery 위젯을 만들고 있습니다.Backbone.js 클래스 내에서 jQuery 위젯의 인스턴스 속성에 액세스하는 방법은 무엇입니까?

Serializer = function(options, element){ 
    this.element = element; 
    this.data = options.data; 
    this.collection = new Serialize.Collection(this.data); 
    this.view = new Serialize.View({ el: this.element, collection: this.collection }); 
}; 

$.widget.bridge("serialize", Serializer); 

$.widget.bridge이 (레일에 의해 설정됩니다 여기 @vars)를 위젯의 인스턴스를 생성 및 옵션에 전달하는 친절한 래퍼를 제공합니다 :


다음은 컬렉션 뷰는 자신의 서브 뷰를 생성 모델을 생성
$('#item').serialize({ 
    data: <%= @data %>, 
    name: '<%= @name %>', 
    keys: '<%= @keys %>' 
}); 

나중에 생성 된 모델 및 뷰는 위젯 인스턴스의 옵션에 액세스해야합니다.

this.collection = new Serialize.Collection(this.data, options); 

그리고 그들은 (예를 들어 뷰에서) 필요한 경우 나중에 참조 : 지금까지 콜렉션 자체의 옵션을 설정하여이 문제를 해결

var keys = this.model.collection.keys 

하지만이 지저분 얻고 아니다 그 융통성.

단일 인스턴스의 경우 Serialize.Config = { // options }을 설정하고 전역으로 액세스 할 수 있습니다. 그러나 여러 인스턴스의 경우 각 인스턴스마다 고유 한 구성이 필요합니다.

제 질문은 위젯 인스턴스와 그 옵션을 백본 클래스 내에서 인수로 전달하지 않고도 액세스 할 수있는 명확한 방법이 있습니까?

답변

1

위젯에 전달하는 옵션에 따라 각 위젯 인스턴스를 렌더링하는 것처럼 보입니다.

Backbone.js보기 규칙에 따라 이러한 옵션을 저장할 수 있습니다. 특히 위젯 당 하나의보기가 있기 때문에 특히 그렇습니다. 따라서

, 나는 다음을 수행하게

Serializer = function(options, element){ 
    // add DOM node and collection to the options hash 
    options.el = element; 

    // create view and pass options 
    this.view = new Serialize.View(options); 
}; 

당신은 당신이 Serializer에 전달 된 모든 옵션에 액세스 할 수 있습니다 (아마도 this.view.render()와) 위젯 렌더링 할 때 :

Serialize.View = Backbone.View.extend({ 
    initialize: function() { 
     // create collection 
     this.collection = new Serialize.Collection(this.options.data); 

     // register events if needed 
     this.collection.bind('add', this.render_one_element_of_the_collection); 
     this.collection.bind('fetch', this.render_whole_collection); 
    }, 

    render: function() { 
     var data = this.options.data; 
     var keys = this.options.keys; 
     // etc 

     // do something with your variables 

     return this; 
    } 
}); 
+0

감사합니다, 그 좋은 접근 방법 같아. 모든 것을 초기화하는 위젯 인스턴스에 해당하는 하나의 마스터보기 아이디어가 마음에 들다. 나는 또한 마스터 뷰 내부에서 컬렉션을 만드는 것으로 옮길 것이고, 조금 '시작'을 느끼기 시작할 것이라고 생각한다. :) – meleyal

+0

사실, 그것도 더 깨끗할 것이다! 컬렉션은 마스터 뷰의 일부이므로 안전하게 만들 수 있습니다. 위의 스크립트를 적절하게 변경하십시오. – poezn

관련 문제