Lodash模板返回函数表示数据未定义

时间:2017-03-30 14:12:24

标签: javascript templates lodash

我正在开发代码生成工具,我正在使用Lodash来模拟输出文件。当我尝试从_.template(XXX)运行结果函数时,我得到了

  

未定义“AppData”(模板变量的名称)。

我试图在有和没有AppData变量的情况下调用temp,并且都给了我

  

“ReferenceError:未定义AppData”

templates.forEach((template) => {
      let temp = _.template(template, { AppData: AppData });
      output = temp(AppData);
    });

这是AppData对象:

let AppData = { clientId: clientId,
                appId: applicationId,
                intents: ['Testing1',
                          'Testing2',
                          'Testing3',
                          'Testing4'
                         ]};

以下是3个模板中的一个:

<% _.each(AppData.intents, function( intent ){ %>
<transition event="<%=intent%>" target="<%=intent%>">
<state id="<%=intent%>">
<onentry>
<assign location="href_answer" expr="tfs.getKBAPIUrl(DNIS, environment, '<%=intent%>')"/>
<assign location="reason" expr="'<%=intent%>'"/>
<script><![CDATA[presentAnswer(href_answer,reason);]]></script>
</onentry>
  </state>
<% }) %>

Stack不允许我发布输出,但它是代表完成模板的函数。

2 个答案:

答案 0 :(得分:0)

也许你应该退后一步,先让模板先进行模板化,然后再进行模板化工作,然后再引入更多的复杂性......

var tfsStr = document.querySelector('#tfs-template').textContent;
var compiled = _.template(tfsStr, {
  intents: AppData.intents,
  _: _
});

我做了一点codepen来测试模板

答案 1 :(得分:0)

经过多次粉碎,我意识到了一个简单的问题。

我错误地传递了对象,模板正在寻找错误的东西。在模板中,我删除了我的AppData。对象表示法并更新代码看起来像这样。模板正确地获取了值。

templates.forEach((template) => {
  let temp = _.template(template);
  output += temp(AppData);
});

有点像新手的错误,第一次使用Lodash。