2012-06-29 3 views
1

Я этот скриптПроблема кэширования с помощью CoffeeScript

class Raffler.Views.EntriesIndex extends Backbone.View 

    div: $('#input') 

    initialize: -> 

     console.log @div.val() 

Как вы можете видеть, что это вид позвоночника в.

Я хотел бы кэшировать $('#div') в переменную и называть ее. См. console.log @div.val().

Но это, кажется, не работает ..

Используя обычный JavaScript, я бы написать что-то вроде этого:

var ToDoView = Backbone.View.extend({ 
    div : $('#input'), 
    initialize: function(){ 
     console.log(this.div.val()); 
    } 
}) 

И это работает отлично. Где я ошибаюсь в coffeescript?

+0

Ваш отпечаток выглядит неправильно для версии coffeescript. –

+0

Вы точно, но в исходном коде отступом все в порядке. Это не проблема :( – gaggina

ответ

0

Есть некоторые отличия в том, как работают классы Coffeescript и механизм расширения Backbone, что может быть проблемой, с которой вы сталкиваетесь. Но я предполагаю, что это не проблема. Там могут быть различия в том, когда и где вы используете этот код. Если вы поместите код javascript в том же месте, где вы выполняете код coffeescript, значит, он работает нормально? И по соответствующей заметке, что такое exacly, то есть какие сообщения об ошибках вы получаете? Инициализирован ли @div вообще?

0

Вероятно, элемент $("#input") не был загружен в момент запуска вашего кода.

Проблемы с кэшированием значения в классе является то, что класс, скорее всего, определяется за пределами обратного вызова jQuery.ready (до того, как DOM закончит загрузку) поэтому на данный момент ваш класс устанавливает $("#input") в @div JQuery не на самом деле найти этот элемент.

Вы можете установить @div в функции initialize, так как это скорее всего будет вызвано после загрузки DOM.

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