1

업데이트 : 나는 첫 번째 대답과 같은 약간의 해결책을 발견했습니다. 사실 나는 RequireJS를 사용하는 방식이 있는지 알고 싶습니다.보기에서는 특수한 변수 나 매개 변수를 사용하지 않고 수행합니다.. 여기 내 솔루션입니다 :요구 사항/백본 : 종속성 상속?

define(['resthub', 'backbone', 'views/myModule/parent-view', 'views/myModule/a-view'], 
function(Resthub, Backbone, ParentView, AView) { 

    var ParentView = Backbone.View.extend({ 

     // Stuff before 

     buildAView : function(aViewObject){ 
      var aView = aViewObject || AView; 

      // Enought source code before and after those following lines 
      // that I don't want to duplicate in ChildView 
      this.aView = new aView(); 
      this.aView.render(); 
     } 

     // Stuff after 

    }); 

    return ParentView; 
}); 

내가 의존성이 중복 코드를 방지하기 위해 RequireJS에 의해 관리되는 백본 프로젝트에 최대에게 상속을 사용하려고합니다. 사실, 기본 뷰를 확장하는 새로운 뷰를 만듭니다. 기본보기에는 내가 재정의하려는 종속성이 있습니다. 그러나 내가 재정의하려고해도 원래의 의존성이 새로운 것 대신에 취해진 다. 내가 상속해야한다는 것보다주의하십시오. 내가 할 노력하고있어 여기에

는 :

자료보기 I 상속 :

define(['resthub', 'backbone', 'views/myModule/parent-view', 'views/myModule/a-view'], 
function(Resthub, Backbone, ParentView, AView) { 

    var ParentView = Backbone.View.extend({ 

     // Stuff before 

     buildAView : function(){ 
      // Enought source code before and after those following lines 
      // that I don't want to duplicate in ChildView 
      this.aView = new AView(); 
      this.aView.render(); 
     } 

     // Stuff after 

    }); 

    return ParentView; 
}); 

그런 다음 내가 만들려고 볼 수 있습니다. 내가 원하는 건 buildAView() 함수가 a-view에서와 같은 소스 코드가 아닌 b-view에서 AView라는 새로운 의존성을 취하는 것이다.

define(['resthub', 'backbone', 'views/myModule/parent-view', 'views/myModule/b-view'], 
function(Resthub, Backbone, ParentView, AView) { 

    var ChildView = ParentView.extend({ 

     // Stuff before 

     render: function() { 

      ParentView.__super__.render.apply(this, []); 

      /* some stuff inbetween*/ 

      this.buildAView(); 
     } 

    }); 

    return ChildView; 
}); 

감사합니다 :)

답변

0

문제는 당신이 buildAView를 호출 할 때 그래서 그것은 ParentView 모듈에 주입 된 AView를 사용 AView이이 주입 된 기능이 결합되어 있다는 점이다. 그러나 문제를 해결할 수있는 간단한 방법이 있습니다. AView을보기의 속성으로 저장하면됩니다.

define(['resthub', 'backbone', 'views/myModule/parent-view', 'views/myModule/a-view'], 
function(Resthub, Backbone, ParentView, AView) { 

    var ParentView = Backbone.View.extend({ 

     // Stuff before 
     AView: AView, 

     buildAView : function(){ 
      // Enought source code before and after those following lines 
      // that I don't want to duplicate in ChildView 
      this.aView = new this.AView(); 
      this.aView.render(); 
     } 

     // Stuff after 

    }); 

    return ParentView; 
}); 

define(['resthub', 'backbone', 'views/myModule/parent-view', 'views/myModule/b-view'], 
function(Resthub, Backbone, ParentView, AView) { 

    var ChildView = ParentView.extend({ 

     // Stuff before 
     AView: AView, 

     render: function() { 

      ParentView.__super__.render.apply(this, []); 

      /* some stuff inbetween*/ 

      this.buildAView(); 
     } 

    }); 

    return ChildView; 
}); 
+0

범위의 문제라고 생각했습니다. 사실, 내 AView를 포함하는 var없이이를 수행하기 위해 RequireJS를 사용하는 또 다른 방법이 있는지 알고 싶었습니다. 내 대답은 내가 당신이 제안한 비슷한 방법으로 일해 왔기 때문에 : buildAView 함수는 ParentView에 주어진 경우 AView 객체 대신 사용되는 매개 변수를받을 수 있습니다. 그렇지 않으면 ParentView의 정의에서 원래 AView가 사용됩니다. 내 원래 게시물을 참조하십시오. – Steph0

관련 문제