2012-05-19 2 views
0

У меня есть основные .js файл с этим в немJQuery код все еще выполняется, даже после того, как закомментирована

//$('#show').html('<%= escape_javascript(render(:partial => 'show')) %>'); 

Когда .js файл называется, приведенный выше код запускается на выполнение и парциальное становится еще хотя он прокомментирован. Когда код удаляется, фрагмент никогда не будет отображаться. DOM остается неизменным, но я вижу частичное отображение сервера в командной строке. Что дает?

+2

не можем сказать от этого угла. вы очистили кеш? – Joseph

+0

Я бы предложил поставить брекерскую точку на эту строку и посмотреть на стек вызовов. – andreapier

+0

@Joseph Я очистил кеш и все еще такое же поведение – Steve

ответ

4

Вы комментируете JavaScript, который выполняется на стороне клиента.

Частичный рендеринг происходит на стороне сервера, прежде чем клиент когда-либо увидит визуализированный JavaScript.

Другими словами, комментирование JavaScript имеет нулевой эффект на сервере -side обработка. Если вы не хотите, чтобы на стороне сервера строку, которая будет отображаться, закоментируйте:

<%#= escape_javascript(etc) %> 

Давайте предположим, что парциальное делает так:

<h1>Foo bar baz</h1> 
<div>Plugh!</div> 

Спасаясь это для JavaScript повернет новая линия в \n (и избежала бы одно- и двух кавычек и т. д.), оставив вас с этим на стороне клиента:

$('#show').html('<h1>Foo bar baz</h1>\n<div>Plugh!</div>'); 

Независимо от того, закомментирован ли JS или нет, часть будет отображаться, если вы не закомментируете результаты кода Ruby escape_javascript.

На стороне клиента, если JS закомментирован, он не должен обновлять HTML-код show - вы говорите, что это так?

+0

Но вызов частичного происходит в JavaScript, поэтому, если это закомментировано, не должен ли вызов никогда не проходить? – Steve

+0

Нет. Шаблон erb создает кусок javascript. Он не знает о значении этого куска. –

+0

@Steve Нет «в» JavaScript - вот что я говорю, два типа кода выполняются в двух разных местах. Клиентский JavaScript выполняется на стороне клиента, Ruby выполняется на сервере. –

0

Проверьте, чтобы увидеть, если это линия или у вас есть это назвать какое-то место еще:

//$('#show').html('<%=escape_javascript(render(:partial => 'show'))%>');alert('This is the line'); 
+0

Это строка, потому что, как только я удалю ее, вызов частичного кода больше не будет выполнен. – Steve

0

Возможно, ваша функция escape_javascript вставляет новую строку? Это закончит комментарий и вызовет что-либо после выполнения новой строки.

+0

Я удалил его и все тот же поведение – Steve

+0

Попробуйте сохранить файл .js из вашего браузер. Это должно устранить рубины на рельсах из уравнения - вы можете затем проверить правильность того, вставлены ли новые строки в комментарий. – Brilliand

+0

'escape_javascript' - помощник Rails; AFAIK не вставляет случайные символы новой строки. –

0

У меня была аналогичная проблема, и я выяснил, что нужно для работы. Возможно, что-то подобное поможет вам!

Вместо того, чтобы комментировать строки кода, попробуйте просто построить логический оператор, который дает вам возможность включения/выключения функций, которые вы хотите запустить. Я установить мину вверх, как это так, я мог отключить скрипт, но сохранить его для дальнейшего использования:

var toggle = 1; 

if(toggle == 2){ 
    functions that you want to run when turned on... 
} 

Поскольку переменная не равна двум, если заявление не будет вынести из того, что хранится внутри него, эффективно «комментируя» этот код для вас! Чтобы вернуть его обратно во все, что вам нужно сделать, это изменить переменную «переключить» на 2 (или любое другое значение «on»). Просто небольшая работа, которую я нашел для себя, надеюсь, что это поможет!

+0

В то время, когда я задавал этот вопрос, мне было трудно понять, почему внедрен встроенный Ruby-код, указанный в вопросе, выполняется, хотя я думал, что он был прокомментирован. Благодаря ответам, теперь я знаю, что встроенный Ruby запускается до того, как код обрабатывается как javascript. Я думаю, вы неправильно поняли мой вопрос, и на второй взгляд у моего вопроса не было деталей. Я изменил вопрос, чтобы добавить ясность. Спасибо за Ваш ответ. – Steve

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