2014-06-12 2 views
1

메서드를 호출하는 데 문제가 있습니다. 나는 자식 Test 방법을 호출 할 수 싶습니다. 내 상속이 맞는지 확실하지 않습니다.CoffeeScript, 상속, 객체 인스턴스화가있는 Knockout.js

class DebitAccount 
    constructor:() -> 
     @SortOrder = ko.observable() 
     @Entity = ko.observable() 
     @Field = ko.observable() 
     @FieldValue = ko.observable() 
     @Constant = ko.observable() 
     @Default = ko.observable() 
     @Entity2 = ko.observable() 
     @Field2 = ko.observable() 

    Test:() => 
     alert 'test' 

class ContributionMappings 
    constructor:() -> 
     @DebitAccount = ko.observable() 

class Mapping 
    constructor:() -> 
     @ContributionMappings = ko.observable() 

    Save:() => 
     alert 'save' 

$() => 
    @viewModel = new Mapping  

    # connect items with observableArrays 
    ko.applyBindings(viewModel)  
:

또한 ..

<a href="javascript:void(0);" 
    data-bind="click: ContributionMappings().DebitAccount().Test">Test</a> 

코드를 작동하지 않는

<a href="javascript:void(0);" data-bind="click: Test">Test</a> 

작동하지 않습니다

<a href="javascript:void(0);" data-bind="click: Save">Save</a> 

일들

jsbin demo

+0

죄송합니다, indentation off b/c WYSIWIG에서 코드처럼 보이게하려면 4 칸을 모두 탭해야합니다. 위의 jsbin 링크를 사용하십시오. 그것은 실례입니다. 그렇습니다 그들은 방법입니다. – mrjamiebowman

+0

** 들여 쓰기는 문제와 관련이 없습니다. JSBin 링크 ** – mrjamiebowman

+0

http://jsbin.com/setiboka/1/edit를 사용하십시오. – mrjamiebowman

답변

1

0 클래스의 프로토 타입 상속을 달성하는 방법에 대한 자세한 내용은 커피 스크립트 페이지의 Classes, Inheritance, and Super 섹션에서보세요. 클래스 이름은 나에게 상속 관계를 제안하지 않는다 - 당신이 달성하기 위해 노력하고 정확하게 확실하지 않다 그러나

class DebitAccount 
    constructor:() -> 
     @SortOrder = ko.observable() 
     # etc. 

    Test:() => 
     alert 'test' 

class ContributionMappings extends DebitAccount 
    constructor:() -> 
     super 

class Mapping extends ContributionMappings 
    constructor:() -> 
     super 

    Save:() => 
     alert 'save' 

: 즉, 귀하의 코드는 아마 같은 것을 보일 것입니다.

class DebitAccount 
    constructor:() -> 
     @SortOrder = ko.observable() 
     #etc. 

    Test:() => 
     alert 'test' 

class ContributionMappings 
    constructor:() -> 
     @DebitAccount = ko.observable(new DebitAccount()) 

class Mapping 
    constructor:() -> 
     @ContributionMappings = ko.observable(new ContributionMappings()) 

    Save:() => 
     alert 'save' 

을하지만 당신은 내부를 참조 할 때 중간 오브젝트를 통과해야 할 것 : 대신 오히려 그들을 확장보다는 클래스를 구성하려는 경우, 당신의 코드는 뭘 찾았는지 매우 유사 보일 것이다 넉 아웃 바인딩으로 속성 :

<a href="javascript:void(0);" data-bind="click: ContributionMappings.DebitAccount.Test">Test</a>