【问题标题】:TypeError using underscore.js template with _.find使用带有 _.find 的 underscore.js 模板的 TypeError
【发布时间】:2013-09-02 08:48:48
【问题描述】:

我正在写一个这样的小模板:

var viewHelpers = {
  valExists: function (variable) {
    var exists = ((typeof variable == "string") && (variable != ""));
    console.log('variable exists: ', exists, ' value: ', variable);
    return exists;
  },
}

var tpl = '<h1>Hello <%- _.find(["a", "b"], _.valExists) %></h1>';
_.extend(data, viewHelpers);
console.log(_.template(tpl, {
  data: data,
}));

我希望模板返回“

Hello a

”。

相反,Firefox 显示此错误:

TypeError: t is undefined

怎么了?

【问题讨论】:

    标签: javascript templates underscore.js


    【解决方案1】:

    我理解有误。我现在找到了解决方案。

    上述问题是在_对象中找不到函数时出现的。并且 viewHelpers 根本不打算绑定到 _ 对象。它们应该只是提供给模板的数据的一部分。

    我的代码应该是这样的:

    var tpl = '<h1>Hello <%- _.find(["a", "b"], valExists) %></h1>';
    
    var datalist = {
        data: data,
        valExists: function (variable) {
            var exists = ((typeof variable == "string") && (variable != ""));
            console.log('variable exists: ', exists, ' value: ', variable);
            return exists;
        },
        printExists: function (variables) {
            return _.find(variables, valExists);
        }
    }
    
    console.log(_.template(tpl, datalist));
    

    这些 viewHelper 实际上与 datalist 中的其他变量位于相同的命名空间中。

    为了让它看起来更好,我可以将 viewHelper 的定义与 datalist 分开:

    var tpl = '<h1>Hello <%- _.find(["a", "b"], valExists) %></h1>';
    
    var viewHelpers = {
        valExists: function (variable) {
            var exists = ((typeof variable == "string") && (variable != ""));
            console.log('variable exists: ', exists, ' value: ', variable);
            return exists;
        },
        printExists: function (variables) {
            return _.find(variables, valExists);
        }
    }
    
    var datalist = {
        data: data,
    }
    
    // add the viewHelpers definition to datalist
    _.extend(datalist, viewHelpers);
    
    //
    console.log(_.template(tpl, datalist));
    

    它们实际上是相同的。

    当提供给模板的数据中不存在我的 viewHelpers 时,就会出现我的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多