2014-04-01 1 views
1

Backbone.Marionette에서 컨트롤러에 대한 "기본 클래스"를 만들려고합니다. 나는이 질문이 마리오네트가 백본과 동일하게 확장 된 이후의 백본에 대한 지식을 가진 누군가가 대답 할 수 있다고 생각한다. 내가 한 것은 Marionette.Controller에서 확장하여 기본 컨트롤러로 작동하는 Marionette.Controller를 먼저 만드는 것입니다. 그런 다음 기본 컨트롤러를 더 확장하여보다 전문화 된 기능을 추가했습니다. 프로토 타입을 사용하여 하위 컨트롤러에서 initilize 함수를 호출합니다. 기지가 정적 인 것처럼 보일 때까지 이것은 잘 작동하는 것처럼 보였다. 아래 예제에서 childid는 각 인스턴스마다 고유합니다. 그러나 baseid는 모든 인스턴스에 대해 동일 할 것이고, 최신 baseid가 추가됩니다.Marionette.Controller를 확장하십시오.

App.Common.BaseWidget.Controller = Marionette.Controller.extend({ 
    initialize: function (options) { 
     this.model = options.model; 
     this.id = options.baseid; 
     this.region = options.region; 
    } 
}); 

App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({ 
    initialize: function (options) { 
     App.Common.BaseWidget.Controller.prototype.initialize(options); 
     this.id = options.childid; 
    } 
}); 
var widgets = [] 
widgets.push(new App.Widgets.ChildWidget.Controller({ "model": model , "region": region, "baseid": App.newGuid(), childid: App.newGuid() })); 

이 문제의 원인을 아는 사람이 있습니까?

답변

3

당신은 아마 초기화에 대한 적절한 범위를 설정해야합니다

당신은 생성자의 __super__ 사용하여 부모의 메소드 호출 할 수 있습니다 백본에서
App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({ 
    initialize: function (options) { 
     App.Common.BaseWidget.Controller.prototype.initialize.apply(this, arguments); 
     this.id = options.childid; 
    } 
}); 
1

:

App.Widgets.ChildWidget.Controller = App.Common.BaseWidget.Controller.extend({ 
    initialize: function (options) { 
     this.constructor.__super__.initialize.apply(this, arguments); 
     this.id = options.childid; 
    } 
});