1

我正在使用 mustache 构建单个字符串,替换其中的几个变量。我很想改用 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"

但是,我无法想象一种直接、干净、不偷偷摸摸的方式来实现这一目标。你可以吗?

4

3 回答 3

0

我假设您正在客户端上加载数据并希望根据返回的数据生成一个字符串。您可以有一个可用的函数为您返回生成的字符串

function generateString(val1, val2) {
  return `foo${val1} bar${val2};
}

由于获取 val1 和 val2 的 api 调用,您可以在客户端调用该函数吗?

如果您延迟响应直到获得所需的所有数据,此策略也适用于服务器

于 2017-01-26T21:31:29.117 回答
0

将模板字符串放入函数中,然后通过myData

let renderMyTemplate = data => `foo${data.who}`;
//or
let renderMyTemplate = ({who}) => `foo${who}`;


let myResult = renderMyTemplate(myData);
console.log(myResult);
于 2017-01-26T21:59:38.037 回答
0

感谢您的回复和创造性的解决方案。但是,我认为没有解决方案,因为 TemplateStrings 是代码内功能,而其他模板解决方案(如 mustache)是数据驱动的功能。

换句话说,ES6 的模板字符串是一种语言特性,它将其功能限制为静态代码内字符串。任何其他想象中的灵活性都必须依赖于您注入应用程序的代码的动态执行,这是每个黑客的梦想。

因此,对于我最初的想法,关于 Mustache 对于您的源代码中未硬编码的简单字符串是否过分杀伤力,答案是否定的。Mustache 是该场景可接受的解决方案。

于 2017-01-27T15:14:59.937 回答