Javascript ES6 TemplateString a TemplateString
Я использую усы, чтобы создать одну строку, заменив несколько переменных внутри нее. Я хотел бы использовать TemplateString вместо этого, но мне нужно разрешать мою строку во время выполнения, а не во время компиляции кода, так как я читаю строку шаблона из внешнего источника.
Чтобы было ясно:
// mustachy example
// template is "foo{{who}}" and myData.whmustao = "manchu"
let myResult = mustache.render(getMyTemplate(),myData);
console.log(myResult); // "foomanchu"
Это довольно легко, и я хотел бы использовать TemplateString, но, как показано в приведенном ниже примере, - я не могу представить способ внешнего предоставления строки в первую очередь...
// ES6xy example
let myResult = `foo${myData.who}`; // can't get this at runtime
console.log(myResult); // "foomanchu"
Но я не могу представить прямой, чистый, не подлый способ достижения этого. Ты можешь?
3 ответа
Спасибо за ваши ответы и креативные решения. Однако я подумал, что решения не существует, потому что TemplateStrings - это функция в коде, в то время как другие шаблонные решения (например, усы) - это функция, управляемая данными.
Другими словами, строки шаблонов в ES6 - это языковая функция, которая ограничивает свои функциональные возможности статическими строками в коде. Любые другие предполагаемые гибкие возможности должны опираться на динамическое выполнение кода, который вы внедряете в свое приложение, что является мечтой каждого хакера.
Таким образом, ответ на мою первоначальную мысль о том, является ли Усы излишним для простой строки, которая не жестко запрограммирована в вашем источнике, - НЕТ. Усы - приемлемое решение для этого сценария.
Поместите строку шаблона в функцию и передайте myData
let renderMyTemplate = data => `foo${data.who}`;
//or
let renderMyTemplate = ({who}) => `foo${who}`;
let myResult = renderMyTemplate(myData);
console.log(myResult);
Я предполагаю, что вы загружаете данные на клиент и хотите сгенерировать строку на основе возвращенных данных. Вы можете иметь функцию, которая возвращает сгенерированную строку для вас
function generateString(val1, val2) {
return `foo${val1} bar${val2};
}
Вы можете вызвать эту функцию на клиенте в результате вызова API, который получает val1 и val2?
эта стратегия также будет работать на сервере, если вы задержите свой ответ, пока у вас не будут все необходимые данные