좋아, 내가 잘못하고있는 것 몇 가지. 작은 책에서
@include
1.
하지 클래스를 객체 걸립니다. 클래스로 작업하려면
@include FooMixin::
을 작성해야합니다. 그러나, 나는 그때부터 사물을 사용하기 시작했다.
2.
객체 대신 클래스를 사용하여, 굵은 화살표는 오른쪽
_this = this
를 판독하는 상단의 커피 스크립트 랩퍼의 내부 선을 추가한다. 모든 메서드는 우리가 원하는 것이 아닌 전역 컨텍스트에 바인딩됩니다. 수정하려면 굵은 화살표를 얇은 화살표로 변환하고 각 기능을
Foo
인스턴스에 바인딩해야합니다.
constructor: ->
for fname in _.functions FooMixin
@[fname] = _.bind @[fname], @
super
내가
_.bindAll @, _.functions FooMixin
을 시도하지만, 위의 코드를 꽤 많이와 동일한
_.bindAll
방법 그대로보고,
At Function.bind, could not run bind of undefined.
이상한 오류 같은 말을 나에게 오류를 준 : 밑줄을 사용하여 나는
Foo
의 생성자이 추가되었습니다.
이제는 더 나은 가독성과 코드 공유를 위해 클래스를 나눌 수 있습니다.
UPDATE : _.bindAll의 문제점은 그것이 플랫하지 어레이를 취한다는 것이다. 수정은 _.bindAll @, _.functions(FooMixin)...
입니다.
업데이트 : 더 나은 해결책을 찾았습니다.
원본 게시물과 동일합니다. mixins에 클래스를 사용하십시오.
@include FooMixin::
을 사용하거나 @include
을 변경하여 속성 대신 프로토 타입을 조작하십시오.
Foo
생성자에서 메서드를 올바르게 바인딩하는 FooMixin.call @
을 작성합니다.
이것은 잘 작동하며 멋지고 깨끗합니다.
유일한 잠재적 인 문제는 mixins가 기존 속성에 의해 무시된다는 것입니다.내가 볼 수있는이 문제를 얻을 수있는 유일한 방법은 같은 것을 할 수 있습니다 :
after = ->
_.extend Foo, FooMixin::
class Foo
# define...
after()
을 또는 _.defer
에 확장 방법을 전달하지만이 너무 해키 아마 작동하지 않습니다.
backbone.js (또는 underscore.js)를 사용하고있는 사람에게 한 가지 더주의해야 할 점은 모델에 이미 정의 된 ['extend'] (http://backbonejs.org/#Model-extend) 메서드가 있다는 것입니다 여기에 설명 된 것과 충돌합니다. 모든 종류의 문제가 발생했다면 다른 이름으로 바꾸십시오. –