2013-02-22 8 views
3

У меня есть переменная, test, в script.js. Я ссылаюсь на script.js в мой index.jade документ следующим образом: script(type="text/javascript")(src="scripts/script.js").Используйте внешнюю переменную в Jade

В моем файле index.jade мне нужно использовать переменную test, но когда я пытаюсь, почти во всех случаях я получаю сообщение об ошибке 'test' is not defined.

Я обнаружил, что-то вроде body(onload="alert(test);") может получить доступ к test переменной, а что-то вроде p #{test} или p= test не может получить к нему доступ, который на самом деле то, что мне нужно работать.

Итак, как я могу передать переменную от script.js до index.jade, чтобы Джейд ее узнала? Заранее благодарим за любой совет, который у вас может быть.

+0

Вы пробовали передать массив 'colors' в jade как локальную переменную? И что вы подразумеваете под «внешним»: на сервере или внутри другого файла javascript или где-то еще? – zemirco

+1

@zeMirco - Извините, что неясно; по внешнему виду, я имею в виду другой файл Javascript, связанный с моим файлом Jade. Массив отлично работает, когда он объявлен внутри блока нефрита, как я писал в моем вопросе. Проблема в том, что я хочу объявить его глобально в своем файле Javascript и иметь доступ к нему в своем файле Jade. – ben

ответ

3

Это серверный JavaScript:

- var colors = ['red', 'green', 'blue'] 

И это на стороне клиента:

body(onload="alert(colors);") 

Из-за этого цвета на стороне клиента не определено. Вы можете сделать это:

body(onload="alert(#{colors});") 

EDIT:

Если цвета осуществляется на стороне клиента Javascript переменной, то вы должны сделать это следующим образом:

ul#myul 

script 
    window.addEventListener('load', function(){ 
     var ul = document.getElementById('myul'); 
     for(var i = 0; i < colors.length; i++){ 
      var li = document.createElement('li'); 
      li.innerHTML = colors[i]; 
      ul.appendChild(li); 
     } 
    }) 

EDIT:

тест-клиент и не может использоваться как переменная js сервера. чтобы использовать его с jade, вы должны сначала передать его с сервера, как это в nodejs:

res.render('myviewpath', { test: test }); 
+0

На самом деле, когда 'colors' хранится извне, onload =" alert (colors) "работает, тогда как alert (# {colors}) этого не делает. Предположим, я хотел поместить каждый цвет в массив 'colors' в' li' в Jade. Есть ли способ сделать это, если массив, к которому я обращаюсь, не хранится в файле Jade? У меня с этим проблемы. – ben

+0

@ben см. Отредактированный ответ – karaxuna

+0

Спасибо. Пожалуйста, взгляните на мой отредактированный вопрос, так как я думаю, что я неясен. – ben

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