2012-11-01 3 views
1

나는 CS에서 클래스가 있습니다커피 스크립트 클래스와 바인딩

class Model 
    constructor: (objectParams) -> 
    @object = ##object 
    ###constructor 

    baseObject: => {} 
    validate: ko.computed => 
    console.log ko.toJS @object 

문제는 '검증'는 ko.computed 함수의 바인딩 컨텍스트 생성자해야 프로토 타입 속성이 대신 얻을 함께 이 컴파일 :

property:() => 
:

Model.prototype.validate = ko.computed(function() { 
    return console.log(ko.toJS(Model.object)); 
}); 

나는이 생성자에 바인더 제본 할 수 있지만, 지방 화살표 =>에만이 방식으로 작동하는 것 같군합니다

및 ko.computed은 내가 어떻게 해결할 수있는 기능

내에 정의 할 수 없기 때문에이 방법은이

validate: => 
    ko.computed => console.log ko.toJS @object 

작동하지 않습니다?

답변

1

인스턴스에 기능을 결합하고 귀하의 경우 ("전처리"그것은 당신의 파이프 기능에서이

pipe = (fn)-> 
    return -> 
     fn.apply(@, arguments) 


class A 
    foo: pipe -> @bar() 
    bar: -> ... 

처럼 작동 코 :이 솔루션은 생성자 내부의 validate 속성을 설정해야 .computed)는 초기 함수를 래핑하고 .apply를 통해 호출하는 다른 함수를 반환합니다.

지방 화살표 필요 없음 당신은 @

0

함수를 클래스 (프로토 타입)와 연결하기 전에 함수를 "알리는"경우 대개 굵은 화살표를 사용하여 인스턴스에 바인딩되지 않습니다. 그 당신이 원하는 무엇을 취소하고 그래서 생성자에서

this.foo = __bind(this.foo, this); 

에는 전화가 없음을하지 않도록

class A 
    foo: advise => @someMethod() 

중개자 조언 기능은 CS 컴파일러를 끊습니다. 당신이 방법을 정의 내에서 "조언"기능을 사용하는 경우

그러나 다음이 생성됩니다 CS는 당신을위한 폐쇄를 생성합니다 그리고 당신은 예를

class A 
    foo: -> 
     advise => @someMethod() 

에 액세스 할 수 있습니다

A.prototype.foo = function() { 
    var _this = this; 
    return advise(function() { 
     return _this.someMethod(); 
    }); 
}; 

여기서 중요한 것은 "var _this = this;"의 정의입니다. 이는 인라인 함수 정의 내에서 사용될 것입니다.

희망이 도움이됩니다.

+0

감사와 적용 요구하고있다하지만 문제는 또 다른대로 : ko.computed 매개 변수로 내가 인스턴스에 바인더 제본 싶은 다른 기능을 허용하는 기능입니다. 이것이 가능한가? –

+0

다음은이 문제를 다루는 또 다른 Q & A입니다. 이 부정적인 공식화 : http : // stackoverflow.com/questions/13189573/왜 뚱뚱한 - 화살 - 바인딩 -이 - 때 - 내가 - 파이프 - 내 - 정의 방법 - thru -/13189574 # 13189574 – robkuz

1

나는 robkuz identified the problem라고 올바르게 생각합니다.

class Model 
    constructor: (objectParams) -> 
    @object = ##object 

    @validate = ko.computed => 
     console.log ko.toJS @object 
+0

나는 더 일반화 된 버전을 넣어 그 질문과 대답은 여기에 http://stackoverflow.com/questions/13184209/when-does-the-fat-arrow-bind-to-this-instance/13184211#13184211 – robkuz

+0

@robkuz 나는 분명하지 않은 것이 'validate' 프라퍼티는 클래스 메소드 내부가 아니라 클래스 선언 레벨에서 호출 된'ko.computed'의 반환 값으로 설정되어 클래스 생성자에'@'를 바인딩합니다. 또한, 나는 그 질문에 직접 대답하는 것이 너무 쉽다는 것을 확신하지 못합니다. – epidemian

+0

당신이 옳다는 것은 분명하지 않았습니다. 더 일반적인 질문에 대답하려고했기 때문입니다. 그래서 분명히 자신의 질문에 답할 것을 권장합니다. http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/ – robkuz