2013-09-23 77 views
0

我是新的咖啡,我想創建類,但有一個問題,當我在按鈕上創建一個「單擊」操作,我如何訪問類屬性?和其他類功能?具有更好的課例從onclick事件訪問類的屬性和方法

編輯問題

感謝這兩個答覆,事情是: 我有一個唯一的文件,現在也不會有那麼多的JavaScript,因此,我想創建一個類,並已通過部分分離的「對象」,讓我把一個更好的例子:

class SiteName 
    isMenuActive: false 
    cartItems: {} 

    constructor: -> 
    that = @ 
    $('.openMenu').on 'click', -> 
    that.menu.open() 

    menu: 
    open:() -> 
     # How can i access "isMenuActive" Here?? 
     # using @ or this, is referer to the item itself, because this action is called with "onclick" 
     if isMenuActive 
     alert 'menu is active' 

    close:() -> console.log 'close menu' 
    other_action:() -> console.log 'blah' 
    call_cart_actions:() -> 
     # how can i call cart properties/functions from "cart" in this same namespace?? 

    cart: 
    add:() -> 
     # how to access SiteName.cartItems ¿? 
     # How to call other class function?? 
    remove:() -> 

我reallyhave的問題,是我喜歡把我所有的「觸發器」(點擊,懸停......)在構造函數中,但是,一旦我調用這些函數,我該如何引用「SiteName」屬性或該類/名稱空間的其他對象/函數?

它是一個很好的做法,有這樣的代碼??在同一個「網站」類上有「菜單」和「購物車」,或者更好地將它們保留在文件/類之間?

非常感謝

+0

爲什麼你需要在那裏額外的'func'命名空間? 「'action'是什麼意思是私人的?」 –

+0

感謝你們兩位,我改進了我的問題 – zhares

回答

0

根據一些研究,我做了,特別是這太問題幫助:

Coffeescript classes and scope and fat and thin arrows

它看起來像你需要將this參考存儲作爲構造函數的一部分。這裏是你的代碼,我放在一起展示的被攻擊的版本:

class actions 
    isActive: false 
    self = {} 

    constructor: -> 
     self = @ 

    func: 
    click:() -> 
     alert self.isActive 
    close:() -> 
     console.log "close function" 

f = new actions 
f.func.click() 
+0

謝謝傑森,這是一個很好的解決方案,直到我找到更好的方法,或者是另一種解決方案,我會使用你的。 – zhares

+0

是的,可能有一個CoffeeScript的方式來做到這一點,但我無法找到任何指出這一點的文檔。 –