2010-05-19 2 views
1

У меня этот код.Переменные шаблона dwoo внутри JavaScript?

{if $loginUrl} 
{literal} 
<script type="text/javascript"> 
    var newwindow; 
    var intId; 
    function login() { 
     var screenX = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft, 
      screenY = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop, 
      outerWidth = typeof window.outerWidth != 'undefined' ? window.outerWidth : document.body.clientWidth, 
      outerHeight = typeof window.outerHeight != 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), 
      width = 500, 
      height = 270, 
      left  = parseInt(screenX + ((outerWidth - width)/2), 10), 
      top  = parseInt(screenY + ((outerHeight - height)/2.5), 10), 
      features = (
       'width=' + width + 
       ',height=' + height + 
       ',left=' + left + 
       ',top=' + top 
      ); 

     newwindow=window.open('{$loginUrl}','Login by facebook',features); 

     if (window.focus) {newwindow.focus()} 
     return false; 
    } 
</script> 
{/literal} 
{/if} 

Это Dwoo шаблоны, я удивляюсь, как я могу использовать мое Dwoo переменных внутри JavaScript? Я пытаюсь сделать это как раз у вас можно увидеть в коде, но он не работает. Мне нужно деформировать код между {literal}, чтобы он мог работать.

+0

Ничего о Dwoo не знаю, но предполагаю, что это на стороне сервера вещь, вероятно, что-то вроде 'val somevar =" {$ somevar} ";' – Jonah

ответ

-1

Вы можете просто сделать {/literal}{$the_varible}{literal} для вставки переменных внутри литеральных тегов.

+0

Не ошибаюсь, но не полная история тоже, и определенно не идеальна, поэтому я хотел бы поднять свой ответ на первое место, так как парень, который спросил находится вне сетки. Надеюсь, я не обижусь. – Seldaek

-2

Хм .. нашел «исправить», но это жёстко и там должно быть что-то лучше:

{if $loginUrl} 
{literal} 
<script type="text/javascript"> 
    var newwindow; 
    var intId; 
    function login() { 
     var screenX = typeof window.screenX != 'undefined' ? window.screenX : window.screenLeft, 
      screenY = typeof window.screenY != 'undefined' ? window.screenY : window.screenTop, 
      outerWidth = typeof window.outerWidth != 'undefined' ? window.outerWidth : document.body.clientWidth, 
      outerHeight = typeof window.outerHeight != 'undefined' ? window.outerHeight : (document.body.clientHeight - 22), 
      width = 500, 
      height = 270, 
      left  = parseInt(screenX + ((outerWidth - width)/2), 10), 
      top  = parseInt(screenY + ((outerHeight - height)/2.5), 10), 
      features = (
       'width=' + width + 
       ',height=' + height + 
       ',left=' + left + 
       ',top=' + top 
      ); 

     newwindow=window.open({/literal}'{$loginUrl}'{literal},'Login by facebook',features); 

     if (window.focus) {newwindow.focus()} 
     return false; 
    } 
</script> 
{/literal} 
{/if} 

Просто .. некрасиво.

4

Удалить теги {literal}. Dwoo достаточно умен, чтобы избежать испортить ваш javascript, если вы не используете объектные литералы в одной строке.

Чтобы быть точным, {после чего пробел, вкладка или разрыв строки не будут разбираться с помощью Dwoo. Единственная проблема в том, если вы делаете что-то вроде:

{foo: "bar"} 

В этом случае у вас есть несколько вариантов, чтобы предотвратить Dwoo разборе:

\{foo: "bar"} // escape the { 
{ foo: "bar"} // add a space so it doesn't match it 
{literal}{foo: "bar"}{/literal} // wrap with literal, but then you can't use vars inside again 

// or expand it to use multiple lines, which is usually more readable anyway 
{ 
    foo: "bar" 
} 
Смежные вопросы