Незаданная перменная в emit
От: Antik  
Дата: 30.09.10 22:21
Оценка:
Как проверить существует ли переменная вообще в шаблоне который формируются через emit?

<% if(username) { =username } %>


Variable not found — username

<% if(username !== undefined) { =username } %>


Variable not found — username

<% if(username !== null) { =username } %>


Variable not found — username.

Неужели только через try?

 
<% try{ =username } catch(e) { ="error"} %>


Ожидал, что незаданная переменная будет undefined или null. Удалось обыграть ситуацию только через try.
Re: Незаданная перменная в emit
От: c-smile Канада http://terrainformatica.com
Дата: 30.09.10 23:03
Оценка:
Здравствуйте, Antik, Вы писали:

A>Как проверить существует ли переменная вообще в шаблоне который формируются через emit?


A>
A><% if(username) { =username } %>
A>


Использовать не глобальные переменные а property некоего объекта, например [пере]определить переменную self для template.

Т.е. так
<% =self.username || "Ah?" %>


Вот тебе полный пример:

<html>
<head>
  <style></style>  
  <script type="text/template" #template> 
    Hello <strong><%= self.username || "Unknown" %></strong> !
  </script>
  <script type="text/tiscript">
  
    function instantiate(templateSelector,data)
    {
      var tmpl = self.select(templateSelector).value;
      if( !tmpl ) return "Template not found!";
      var sin = Stream.openString(tmpl);
      var sout = Stream.openString();
      emit(sin,sout,{self:data});
      var r = sout.toString();
      sout.close();
      sin.close();
      return r;
    }
  
    $(button#test1).onClick = function()
    {
      var data = {};
      $(div#out).html = instantiate( "script#template", data );
    }
    $(button#test2).onClick = function()
    {
      var data = { username:"Antik" };
      $(div#out).html = instantiate( "script#template", data );
    }
  
  </script>    
</head>
<body>

  <button #test1>Test 1</button>
  <button #test2>Test 2</button>
  <div #out />

</body>
</html>


A>Ожидал, что незаданная переменная будет undefined или null. Удалось обыграть ситуацию только через try.


Обращение к неопределнной глобальной переменной в 99% случаев есть ошибка. Поэтому по многочисленным просьбам трудящихся runtime генерирует ошибку в этом случае.
Обращение же к неопределенной property есть штатная ситуация.
Re[2]: Незаданная перменная в emit
От: Antik  
Дата: 01.10.10 12:42
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Обращение к неопределнной глобальной переменной в 99% случаев есть ошибка. Поэтому по многочисленным просьбам трудящихся runtime генерирует ошибку в этом случае.

CS>Обращение же к неопределенной property есть штатная ситуация.

ОК. Позиция и дальнейшие действия понятны. Спасибо.
Замечу только, что в серверном "по природе" php runtime выводит Notice и не вызывает краха шаблона.
Re[3]: Незаданная перменная в emit
От: c-smile Канада http://terrainformatica.com
Дата: 01.10.10 17:16
Оценка:
Здравствуйте, Antik, Вы писали:

A>Здравствуйте, c-smile, Вы писали:


CS>>Обращение к неопределнной глобальной переменной в 99% случаев есть ошибка. Поэтому по многочисленным просьбам трудящихся runtime генерирует ошибку в этом случае.

CS>>Обращение же к неопределенной property есть штатная ситуация.

A>ОК. Позиция и дальнейшие действия понятны. Спасибо.

A>Замечу только, что в серверном "по природе" php runtime выводит Notice и не вызывает краха шаблона.

Посмотрю что можно сделать
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.