Как сделать микро-шаблоны Resig XHTML-совместимыми? - PullRequest
3 голосов
/ 25 июня 2009

Я экспериментировал с микро-шаблоном Джона Ресига , который прекрасно работает. Однако разметка не пройдет проверку XHTML 1.0 Transitional. (Помимо прочего, атрибуты id приводят к ошибкам.)

Замена идентификаторов тегов <,> на [[,]], проходит проверку. Таким образом, я создал js-скрипт, который во время загрузки (готовый документ jQuery) конвертирует квадратные скобки обратно в обычные маркеры. Это отлично работает в FF, но не в IE, Chrome и т. Д.

Сценарии, встроенные в теги CDATA, также подтверждаются.

Вопрос: есть ли способ вставить микро-шаблон в скрипт и все же пройти валидацию XHTML? Моя идея заключалась в том, чтобы удалить теги CDATA после загрузки страницы. Но, возможно, есть более разумные способы. (Примечание: я бы предпочел не вводить HTML через js, поскольку разметку будет сложно поддерживать.)

PS: я просматривал другие шаблоны js, но они либо не соответствуют XHTML, либо слишком громоздки.

TIA для любых подсказок.

Ответы [ 3 ]

5 голосов
/ 25 июня 2009

Почему вы сталкиваетесь с проблемой изменения всех методов, которые используют микро-шаблон, а не с изменением самого микро-шаблона? Кажется, что это пустая трата обработки, чтобы загрузить все определенным образом, а затем изменить все так, чтобы оно было совместимо со сценарием.

Почему бы не изменить исходный скрипт для использования тегов [[ вместо изначально предоставленных тегов <%

Вот как он идентифицирует шаблоны

str
          .replace(/[\r\t\n]/g, " ")
          .split("<%").join("\t")
          .replace(/((^|%>)[^\t]*)'/g, "$1\r")
          .replace(/\t=(.*?)%>/g, "',$1,'")
          .split("\t").join("');")
          .split("%>").join("p.push('")
          .split("\r").join("\\'")
      + "');}return p.join('');");

Теперь измените <% на [[ и >% на ]]

str
          .replace(/[\r\t\n]/g, " ")
          .split("[[").join("\t")
          .replace(/((^|]])[^\t]*)'/g, "$1\r")
          .replace(/\t=(.*?)]]/g, "',$1,'")
          .split("\t").join("');")
          .split("]]").join("p.push('")
          .split("\r").join("\\'")
      + "');}return p.join('');"); 
1 голос
/ 12 апреля 2010

Попробуйте использовать CDATA.

0 голосов
/ 01 августа 2011

Вот версия, которая использует массивы для объединения строк (и проверяет, если data = null)

var _out = [];
// check if the data is null and create an empty object 
_out[_out.length] = ('if (typeof data === "undefined" || data == null){  data = {}; }   ');
_out[_out.length] = ('var out=[];');
_out[_out.length] = ("out[out.length] = ' " );
_out[_out.length] =   str.replace(/[\r\t\n]/g, " ")
   .replace(/'(?=[^%]*\]\])/g,"\t")
   .split("'").join("\\'")
   .split("\t").join("'")
   .replace(/\[\[=(.+?)\]\]/g, "'; out[out.length] = $1; out[out.length] = '")
   .split("\[\[").join("';")
   .split("\]\]").join("out[out.length] ='");

   _out[_out.length] = "'; return out.join('');";

var value = _out.join('');
return new Function("data", value );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...