2012-03-13 5 views
2

Backbone.js의 플러그인 모델은 정말 좋지만, 플러그인 소스를 수정하지 않고 여러 플러그인을 사용할 수 있는지 궁금한 점이 하나 있습니다. 예를 들어 Backbone.js에서 다중 플러그인 사용

, 나는이 Collections 두 개의 플러그인을 작성했습니다 말 : 예를 들어, 두 플러그인은 add 방법 같은 것을 무시, 경우

MyBetterCollection = Backbone.Collection.extend({ 
    coolNewFeature: function() { 
     console.log('This feature is great.'); 
    } 

}); 

MyWayBetterCollection = Backbone.Collection.extend({ 
    wayCoolerNewFeature: function() { 
     console.log('This feature is even better.'); 
    } 

}); 

내가 이미 몇 가지 잠재적 인 문제를 볼 수 있습니다. 하지만 제 3 자 플러그인을 수정하는 것은 어리석은 일입니다.

MyWayBetterCollection = MyBetterCollection.extend({ 
    ... 
}); 

이 상황을 처리하는 좋은 방법이 있습니까?

답변

1

쉬운 방법은 없습니다. 자바 스크립트에는 전통적인 상속이 없으므로이 기능을 제공하기가 어렵습니다.

서로 작동하거나 호환 가능하도록 설계된 플러그 인을 찾아야합니다.

인터셉터 패턴이나 일부 원숭이 패치를 사용하는 확장 메서드를 제공하여 덮어 쓰여진 이전 프로토 타입의 덮어 쓰기 된 메서드에 액세스 할 수 있습니다.

+0

그 점도 제게 좋은 인상이었습니다.하지만 그 점을 확인하고 싶었습니다. 이론적 근거와 한계점은 타당합니다. 그러나 프로젝트의 사용자 정의 포크 (fork)를 유지 관리해야하는 경우가 아니라면 객체 유형별로 하나의 플러그인을 사용하도록 효과적으로 제한됩니다. 실망. –

+0

예, JavaScript와 같은 많은 것들이 있습니다. 그래도 관심이있을 수 있습니다 : http://www.crockford.com/javascript/inheritance.html 다음 : http://javascript.crockford.com/prototypal.html – tkone

-1

위에서 정의한 두 컬렉션은 서로 완전히 별개입니다. 그들은 단순히 Backbone.Controller에서 메소드를 상속받습니다. 비슷한 이름으로 메소드를 정의한 경우에는 그 메소드를 덮어 씁니다.

Backbone을 다른 프로그래밍 언어의 클래스 상속으로 생각하십시오. 기본적으로 다른 언어와 마찬가지로 Backbone.Collection을 확장합니다. 당신이 당신의 자신의 컬렉션을 확대 할 경우에도

이 결과,이

var MyCollection = Backbone.Collection({ 
    toJSON: function() { 
     var toJSON = this.constructor.__super__.toJSON.call(this); 
     toJSON.extra = 'my extra value'; 
     return toJSON; 
    }); 

처럼, 슈퍼 클래스를 호출 할 수 있습니다, 논리는 남아있다.

+0

자바 스크립트에는 '슈퍼'가 없습니다. Prototypal 상속은 특히 밑줄/백본에서'extend'를 사용할 때 특히 이름 충돌을 덮어 쓰며 이전 버전을 호출하는 방법을 제공하지 않습니다. 100 % 사라졌습니다. '__super__'이 어떻게 존재하고 작동하는지 보여주는 jsfiddle을 보자. http://phrogz.net/js/classes/OOPinJS2.html – tkone

+0

답변 해 주셔서 감사합니다. 'Backbone.Collection'을 확장하면 같은 이름을 공유하는 모든 메소드를 덮어 쓰게된다는 것을 이해합니다. 이는 내 질문에 도움이되었습니다. 동일한 백본 객체를 확장하는 여러 플러그인을 조화롭게 융합시키는 방법이 있는지 궁금합니다. 거기없는 것 같은데. –

+0

@tkone 물론, 자바 스크립트에는 __super__이 없습니다.하지만 원래 백본 및 확장 백본 객체에 동일한 이름을 사용하지 않는 한 Backbone에는 적어도 위의 코드가 예상대로 작동합니다. – Akasha