2013-02-20 3 views
1

Итак, я пишу некоторый файл coffeescript для проекта, и я пытаюсь создать некоторые статические свойства в классе. Я слежу за другим файлом в базе кода, который делает то же самое, но мой не работает.Проблема со статическими свойствами, которые не определены в CoffeeScript

Мой код

class Messages 
    @toggleUnreadConversations:()-> 
     # This is the line in question, Messages is defined with all the 
     # functions but the property ViewOnlyUnread is undefined 

     Messages.ViewOnlyUnread = !Messages.ViewOnlyUnread 

    @init:-> 
     @ViewOnlyUnread = false 

Другой код в базе кода, который успешно использует статические свойства

class Map 
    @CacheRealtor: (realtor) -> 
     realtor.realtor_id = parseInt(realtor.realtor_id) 

     # Here the static property IdToRealtorMap is defined 
     Map.IdToRealtorMap[parseInt(realtor.realtor_id)] = new Realtor() 
    @Init: -> 
     @IdToListingMap = [] 
     @IdToRealtorMap = [] 

Из того, что я могу сказать, эти INIT функции называют таким же образом, при загрузке страницы вызывается init. Оба класса являются статическими классами, никогда не существует экземпляра любого из них. Кто-нибудь имеет представление о том, что может быть проблемой?

+0

что не работает? – robkuz

+0

Messages.ViewOnlyUnread оценивает значение undefined при выполнении этой строки кода. – Mike

ответ

4

init функция установки переменной экземпляра, но ваша toggleUnreadConversations функция пытается ссылаться на него как бы это свойство вашего класса.

Вы должны использовать @ обратиться к переменной экземпляра, что init наборы:

class Messages 
    @toggleUnreadConversations: -> 

    # reference the instance variable 
    @ViewOnlyUnread = [email protected] 

    @init: -> 
    @ViewOnlyUnread = false 
+0

Вспомните, что я никогда не инициализировал экземпляр класса. Когда моя страница загружается, я просто вызываю Message.init(). Моя цель - сделать его классом, класс Message - это просто способ разместить всю эту функциональность внутри пространства имен. – Mike

+0

А, я получил. В этом случае я бы рекомендовал сделать 'Messages' просто объектом:' Messages = {} ', а затем установить свойства этого объекта. «Класс» в CoffeeScript действительно предназначен для объектов с конструктором, который будет создан. –

Смежные вопросы