2013-07-23 40 views
1

我正在嘗試在coffeescript中定義一個類,以便在我的rails項目中使用它。我的語法定義類的常量和參考這些努力,這是我到目前爲止有:coffeescript類中的實例變量和常量

class Project 

    inputFields : 
    title: '#title' 

    calculateDataList : [ 
    @inputFields.title 
    ] 

但瀏覽器抱怨:

Uncaught TypeError: Cannot read property 'title' of undefined

我不是確定這裏是正確的語法。任何人都可以幫我嗎?

感謝,

+0

如果'calculateDataList'將是一個函數,而不是它會工作的數組。 – Bergi

回答

1

這是一個CoffeeScript的類的基本語法:

class Add 
    constructor: (number1, number2) -> 
    @number1 = number1 
    @number2 = number 2 

    run: -> 
    @number1 + @number2 

我覺得這樣的事情會爲你的代碼工作:

class Project 
    inputFields: -> 
    title: '#title' 

    calculateDataList: -> 
    [this.inputFields().title] 

Project是一個類, inputFields()calculateDataList()是方法。要調用calculateDataList()中的inputFields()方法,請使用this關鍵字。

使用以下命令運行代碼:

p = new Project 
p.calculateDataList() 
+2

你不覺得OP可以在互聯網上的任何地方找到這些信息嗎?給你一點解釋你的代碼如何工作,爲什麼OP不?? – Amberlamps

+0

@Amberlamps - 我同意你的評論並更新我的答案。乍一看,我很難理解這個問題,但希望最新的答案更有用。 – Powers

+0

這似乎工作,謝謝,我如何實例類? –

1

必須保存參照原型。試試這個:

class Project 

    inputFields : 
    title: '#title' 

    calculateDataList : [ 
    Project::inputFields.title 
    ] 
0

事實上,你的代碼不能編譯。

我不知道你想要什麼,但這個CoffeeScript的代碼:

class Project 

    inputFields : 
     title: '#title' 

    calculateDataList : [@inputFields.title] 

編譯以下的Javascript:

// Generated by CoffeeScript 1.6.3 
(function() { 
    var Project; 

    Project = (function() { 
    function Project() {} 

    Project.prototype.inputFields = { 
     title: '#title' 
    }; 

    Project.prototype.calculateDataList = [Project.inputFields.title]; 

    return Project; 

    })(); 

}).call(this); 
+0

因此,它會*編譯? – Bergi

+0

是的,它在v1.6.3上運行 – edi9999

+0

然後,如果OP的代碼已經編譯完成,那麼你的答案會解決什麼問題? – Bergi