JavaScript вставляет аргументы метода в шаблон строки - PullRequest
1 голос
/ 14 сентября 2011

Я не уверен точно, как будет выглядеть окончательная реализация, но основы в том, чтобы вставить аргументы метода в строку «шаблон». Во-первых, я мог бы просто заменить регулярное выражение, но у него есть некоторые недостатки, которые я готов принять в случае необходимости. Второй немного сложнее. Как я могу получить имена из шаблона и заменить на соответствующие из переданного объекта? Спасибо за любую помощь.

var myTemplate = 'Hello {name}'; // or something similar
var name = 'Bob';
function applyTemplate(tpl,str) {
    //do stuff here to replace {name} with passed argument
}
var newStr = applyTemplate(myTemplate,name); //should return 'Hello Bob'

//Also this one
var myTemplate = 'Good {timeOfDay} {name}';

function applyTemplate(tpl,o) {
    //simple objects only, don't need nested
}
var newStr = applyTemplate(myTemplate,{name:'Bob',timeOfDay:'morning'}); //should return 'Good morning Bob'

1 Ответ

1 голос
/ 14 сентября 2011

Если вам не нужна дополнительная проверка и проверка, вы можете просто заменить {key} на value, например:

function applyTemplate(tpl,o) {
    for(var key in o)
        {
            if(o.hasOwnProperty(key))// prevent iteration on any prototype inherited methods
                tpl = tpl.replace('{'+key+'}',o[key]);
        }
    return tpl;
}

Что касается вашей простой первой функции applyTemplate, так как вы делаетене имея никакого представления о том, каким должен быть ключ, вы можете использовать регулярные выражения для замены только первых {...} встреченных:

 function applyTemplate(tpl,str) {
     return tpl.replace(/{.*?}/,str);
}

И затем, конечно, вы можете объединить эти две функции в одну, с небольшимразличные функции, основанные на типе аргументов:

 function applyTemplate(tpl,o) {
    switch(typeof o){
        case 'object' : 
            for(var key in o)
                {
                    if(o.hasOwnProperty(key))
                        tpl = tpl.replace('{'+key+'}',o[key]);
                }
            break;
        case 'string' : 
           tpl = tpl.replace(/{.*?}/,o);
           break;
        default : 
            throw new Error('no valid parameters supplied');
    }
    return tpl;
}

Это должно помочь.Если вам интересно, вы можете взять пик в системе шаблонов jquery: http://api.jquery.com/jQuery.template/.

Надеюсь, это помогло.

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