助手中上下文数据中的标签

Tags within context data in helper

我正在尝试解决数据可以包含引用其他数据的标签的情况。因此,如果我的灰尘文件如下所示:

Document.title: {Document.title}
cfg.title: {cfg.title}
output: {#ctx key="{cfg.title}" /}

我的上下文是这样的:

{
  cfg: {
    title: '{Document.title}'
  }
  , Document: {
    title: 'Here is my title'
  }
  , ctx: function(chunk, context, bodies, params){
    return context.resolve(params.key);
  }
}

我得到以下输出:

Document.title: This is the title
cfg.title: {Document.title}
output: 

我的 "ctx" 辅助函数需要是什么样子才能输出 "Here is my title"? (注意:我知道只指向 Document.title 会更容易,但是 'cfg' 和 'Document' 是从不同的地方生成的,并在渲染时合并)

在某些时候,您必须编译(或以其他方式解析)构成您的配置的小模板。这是一种可能的方法,我使用 dust.compile 提前构建配置:

{
  cfg: {
    title: dust.compile('{Document.title}')
  }, Document: {
    title: 'Here is my title'
  }, ctx: function(chunk, context, bodies, params){
    eval(params.key)(chunk, context);
  }
}

使用模板:

{#ctx key=cfg.title /}

请注意,您在这里直接传递 cfg.title 而不是先将其字符串化——这很重要,这样您就不必使用 context.resolve 进行双重查找。

此方法不会生成模板可读的 cfg.title,因此如果这对您很重要,您可以将 dust.compile 步骤移动到 ctx 函数内部。