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?

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

Другие вопросы по тегам