HTML-шаблоны внутри файла JavaScript ... Что я делаю не так? - PullRequest
1 голос
/ 15 июля 2011

Я пытаюсь достичь того, чтобы хранить шаблоны HTML для всего, что должно быть сгенерировано на лету, в отдельном файле js (вместо рендеринга его на странице).

buildHtmlФункция, как его текущая настройка работает нормально.Я застрял в том, что, если ... У меня есть другая переменная внутри объекта шаблона с именем 'input3', и ее разметка выглядит примерно так: <div>(exact markup from commonInput)</div>

Я пытался использовать ее как input 3 : '<div>' + this.commonInput + '</div>', но получаетсяВы не можете ссылаться на свойства объекта изнутри, используя this (объяснено здесь) .

Я мог бы создать 'input3' с полным html, но для больших html-блоков этот подход не очень полезен.

В поисках

  1. решения этой конкретной проблемы
  2. причин, по которым такой подход плохая идея
  3. лучшие альтернативы

    $j(document).ready(function() {
    
    var namespace = window.namespace || {};
    namespace.feature = namespace.appName || {};
    
    namespace.feature.templates = {
    
    input1  :   '<div>'+
                    '<p class="abc">Hey {username}</p>'+
                '</div>',
    
    input2  :   '<div>'+
                    '<div class="description">{description}</div>'+
                '</div>',
    
    commonInput :   '<div class="common">Common code</div>'
    
    };
    
    namespace.feature.module = function() {
    
    var container  = $j('#container'),
        t = namespace.feature.templates;
    
    var buildHtml = function(type) {
        var tmpHtml = t.input1 + t.commonInput + t.input2;
        container.append(tmpHtml);
    }
    
    var init = function() {
        buildHtml();
    }
    
    return {
        init : init,
    };
    
    }();
    
    namespace.feature.module.init();
    
    });
    

Ответы [ 2 ]

1 голос
/ 15 июля 2011

только на макушке.

Вы можете написать шаблоны как функции, которые строят строки.

input3 : function(param) {
    return '<div>' + param + '</div>'
}

, то:

var tmpHTML = t.input1 + t.input2 + t.input3(t.commonInput);

Кроме того, мне нравится создавать собственные DOM-объекты при построении HTML. и избегайте использования жестко закодированных строк.

http://mg.to/2006/02/27/easy-dom-creation-for-jquery-and-prototype

1 голос
/ 15 июля 2011

Я не уверен, какой у вас точный вопрос, но что касается лучших альтернатив, Я бы предложил использовать шаблоны jQuery.

Вот страница сравнения для всех различных шаблонизаторов и их производительности: http://jsperf.com/dom-vs-innerhtml-based-templating

Вы можете просмотреть ревизии, чтобы найти различные комбинации двигателей, а также запустить их в разных браузерах, чтобы увидеть разницу в скорости.

Обновление : исходный проект шаблона jquery больше не активен. Это новый дом для старого проекта: https://github.com/BorisMoore/jquery-tmpl

Я бы больше не рекомендовал jquery-шаблоны, так как сейчас есть намного лучшие альтернативы. В последний раз, когда я проверял, dustJs by connectedIn fork кажется наиболее перспективным.

...