jTemplates {#for} не работают в Internet Explorer 7, ошибка? - PullRequest
2 голосов
/ 30 января 2012

Я много боролся с jTemplates , но продолжаю терпеть неудачу с {#for} в Internet Explorer 7, хотя он отлично работает в Firefox и Chrome (не тестировался в других браузерах).

Я создал jsFiddle с очень простым контрольным примером. Скажите, пожалуйста, почему он не работает с IE7?

$("#result").setTemplate('Test: {$T.test} <br/>N: {#for index = 1 to 10} {$T.index} {#/for}');

$("#result").processTemplate({ "test": 3 });

Сценарий должен написать

Test: 3
N: 1 2 3 4 5 6 7 8 9 10

Но в IE 7 я просто получаю

Test: 3
N:

РЕДАКТ. 1:

В реальном случае за пределами jsFiddle я всегда получаю ошибку javascript: длина нулевая или нет объекта , который, по-видимому, связан с jTemplates, вызывающим jQuery get (), но при отладке с помощью Firefox / Firebug ни к чему меня не ведет (он просто работает), я не могу правильно отлаживать с IE.


РЕДАКТИРОВАТЬ 2:

вы также можете попробовать онлайн на сайте разработчика: http://jtemplates.tpython.com/ в разделе «Live edit» с этим примером кода:

$("#result").setTemplate('Test: {$T.version}<br/>Ax: {#for index = 1 to 10} A{$T.index} {#/for}');

$("#result").processTemplate({"version": 4.243});

РЕДАКТИРОВАТЬ 3:

Не нужно вводить какой-либо код, просто посетите jtemplates модульный тест с IE7, чтобы увидеть его FAIL

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Проблема была решена в версии 0.8.1.

0 голосов
/ 30 января 2012

В итоге я использовал jsRender , который, по мнению многих технических блогов, может стать будущим клиентских шаблонов.Я также обнаружил, что jsRender поддерживается большинством мобильных браузеров (включая Blackberry OS 6).

Кажется, что jsRender поддерживает все функции jsTemplates, но основное отличие состоит в том, что jsRender возвращает строку (и может использоваться безjQuery).


Я только что получил быстрое исправление от автора jTemplates, Tomasz Gloc, которое заставит меня пересмотреть вопрос о клиентской библиотеке шаблонов.Вот оно:

>

строка 707:

oper = '{#foreach (function (i) {return i;}) как' + RegExp. $ 1 + 'begin =' + (RegExp. $ 2 || 0) + 'end =' + (RegExp. $ 3 || -1) + 'step =' + (RegExp. $ 4 || 1) + 'extData = $T} ';

изменить на:

oper =' {#foreach TemplateUtils.LoopFunc = function (i) {return i;}; TemplateUtils.LoopFunc как '+ RegExp. $ 1 +'begin = '+ (RegExp. $ 2 || 0) +' end = '+ (RegExp. $ 3 || -1) +' step = '+ (RegExp. $ 4 || 1) +' extData = $ T} ';

Вы также можете вернуться к версии 0.7.8.

Скоро я выпущу версию 0.8.1 с исправленной ошибкой, использующей другое решение, но все же понадобятся некоторые тесты.

...