Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Мой шаблонизатор JS 
:(
    Опции темы
Elfet
Дата 7.9.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Всем привет!
В своём проекте использую такой-вот JS шабланизатор: http://blog.mesos.ru/2008/08/14/jstemplates/
Только в нём были проблемы с кавычками, поэтому переработал его следующим образом:
Код

function View(str) {
    function callback(match, p1)
    {
        var r = p1.replace(/\\'/g, "'");
        if(r[0] == '=')
        {
            r = " p.push("+r.substring(1, str.length)+");";
        }
       
        return "'); "+r+" p.push('";
    }

    var code =
    "var p=[], print=function(){p.push.apply(p,arguments);}; arg.param=arg;" +
    "with(arg){p.push('" +
    str.replace(/'/g, "\\'").
    replace(/[\r\t\n]/g, " ").
    replace(/<@(.*?)@>/g, callback) +
    "');}return p.join('');";

    return new Function("arg", code);
}

Но он не работает в ie6. Из-за чего, может кто-нибудь подсказать?
Заранее спасибо!


--------------------
PM MAIL WWW Skype   Вверх
magelan
Дата 8.9.2010, 11:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


потерял xPath
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 5.4.2010

Репутация: 2
Всего: 16



Прям так и написанно? 
Код

    str.replace(/'/g, "\\'").
    replace(/[\r\t\n]/g, " ").
    replace(/<@(.*?)@>/g, callback)

Это новая мода от гугл писать синтаксически не правильный код?

должно быть:
Код

    str.replace(/'/g, "\\'").replace(/[\r\t\n]/g, " ").replace(/<@(.*?)@>/g, callback)


PM MAIL   Вверх
ksnk
Дата 8.9.2010, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



magelan, в каком, интересно месте там была синтаксическая неправильность? 


Elfet, В IE 6 вот эта конструкция выполняется неправильно
(r[0] == '=') можно ее заменить на 
Код

if (r.substr(0,1) == '=')
...



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Elfet
Дата 8.9.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



ksnk, гуд. спасибо, заработало! 

А ещё скажите, так-вот можно делать?
Код

function ViewClass()
{
    var views = {};
    this.Load = function (str)
    {
        function callback(match, p1)
        {
            var r = p1.replace(/\\'/g, "'");
            if(r.substr(0,1) == '=')
            {
                r = " p.push("+r.substring(1, str.length)+");";
            }
       
            return "'); "+r+" p.push('";
        }

        var code =
        "var p=[], print=function(){p.push.apply(p,arguments);}; arg.param=arg;" +
        "with(arg){p.push('" +
        str.replace(/'/g, "\\'").
        replace(/[\r\t\n]/g, " ").
        replace(/<@(.*?)@>/g, callback) +
        "');}return p.join('');";

        return new Function("arg", code);
    }
    this.Call = function (name, arg)
    {
        if(views[name] == undefined)
        {
            views[name] = this.Load( jQuery("#view_" + name).html() );
        }
        return views[name](arg);
    }
}
window.View = new ViewClass();


Мне это нужно для того что бы не парсить каждый раз заново: View.Call('user', {name: 'Username'})



--------------------
PM MAIL WWW Skype   Вверх
ksnk
Дата 8.9.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Если код отлажен и работает, то почему бы и не пользоваться?
imho, можно попридираться к названиям функций, как-то они неочевидно названы. Templater или что-то подобное было бы более очевидно.
Можно поиграться с аргументами при вызове шаблонизатора. вероятнее всего, несколько аргументов, в каких-то случаях, могут заменить определение объекта и будут более человекопонятны...

но возиться с этим или не возиться нужно понять самому, после какого-то опыта использования шаблонизатора.



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Elfet
Дата 8.9.2010, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Белый и Пушистый
****


Профиль
Группа: Awaiting Authorisation
Сообщений: 3776
Регистрация: 2.4.2003

Репутация: нет
Всего: 16



Назвал я это дело View.Call, так как точно так же в php у меня вызываются шаблоны вида: View::Call('file', array(...))


--------------------
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.