当前位置: 首页 > 面试题库 >

JavaScript下划线模板抛出变量未定义错误

鄢禄
2023-03-14
问题内容

我看了一些有关主干js的视频。这是直接来自视频的示例。是从2012年开始的,所以我认为主干规则/库已经更改,但是我不知道为什么这暂时不起作用。在视频中,该人演示了它在JS小提琴中运行的过程,但我无法使其正常工作。(我在JS
Fiddle中包括了必要的库,即下划线,主干和jQuery)

var V = Backbone.View.extend({

  el:'body',

  render: function () {

    var data = { lat: -27, lon: 153 };

    this.$el.html(_.template('<%= lat %> <%= lon%>', data));

    return this;

  }

});



var v = new V();



v.render();


<script src="http://underscorejs.org/underscore-min.js"></script>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<script src="http://backbonejs.org/backbone-min.js"></script>

问题答案:

您曾经能够一口气解析并填写Underscore模板,如下所示:

var html = _.template(template_string, data);

但是从Underscore
1.7.0开始,第二个参数_.template包含模板选项:

模板 _.template(templateString, [settings])

将JavaScript模板编译为可以评估以进行渲染的函数。[…] settings
参数应为包含任何_.templateSettings应覆盖的哈希值。

您必须使用编译模板_.template,然后执行返回的函数来填写模板:

var tmpl = _.template(template_string);
var html = tmpl(data);

// or as a one-liner, note where all the parentheses are
var html = _.template(template_string)(data);

在您的情况下,它看起来像这样:

var V = Backbone.View.extend({

  el:'body',

  render: function () {

    var data = { lat: -27, lon: 153 };

    var tmpl = _.template('<%= lat %> <%= lon %>');

    this.$el.html(tmpl(data));

    return this;

  }

});



var v = new V();



v.render();


<script src="//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>



<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<script src="//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min.js"></script>


 类似资料:
  • 我正在尝试使用HTML、CSS和Javascript制作一个简单的哑巴井字游戏。 在下面的播放器移动函数中,由于JSON对象中存在Typeerror,因此无法调用ComputerMove函数。 下面是JSON对象:- 检查功能始终有效,控制台响应如下 调试时,我发现在此错误之后,计算机移动()函数永远不会被调用。所以请帮忙。

  • 我没有正确安装吗?我忽略了什么?

  • 正如我们已经描述过的,模板可以使用在数据模型中定义的变量。 在数据模型之外,模板本身也可以定义变量来使用。 这些临时变量可以使用FTL指令来创建和替换。请注意每一次的 模板执行 工作都维护它自己的私有变量, 同时来渲染页面。变量的初始值是空,当模板执行工作结束这些变量便被销毁了。 可以访问一个在模板里定义的变量,就像是访问数据模型根root上的变量一样。 这个变量比定义在数据模型中的同名参数有更高

  • 问题内容: 在jQuery的核心风格指南建议两种不同的方法来检查一个变量是否被定义。 全局变量: 局部变量: 特性: 为什么jQuery为什么对全局变量使用一种方法而对局部变量和属性使用另一种方法? 问题答案: 对于未声明的变量,将返回字符串文字,而身份检查将触发错误 “未定义foo” 。 对于局部变量(您 知道 已在某处声明),不会发生此类错误,因此进行身份检查。

  • 我试图在变量函数模板上使用'decltype'来获取其返回值类型,然后使用它来定义成员变量。但我一直在犯这样的错误: 基本上,decltype失败并将声明为int,而不是推断的返回类型。 它的工作原理是当我提供的所有参数的值,但这不是我要找的行为。因为我不知道该函数有多少参数,所以它必须保持为可变模板函数。 我计划如何使用类模板的示例: 如果我没有任何成员变量,并使用作为: 它编译,因此我相信能够

  • 问题内容: 我使用Underscore模板。是否可以将外部文件 附加 为模板 ? 在骨干视图中,我有: 在我的html中是: 它运作良好。但是 我需要外部模板 。我尝试: 要么 要么 但它没有用。 问题答案: 编辑:这个答案是旧的和过时的。 我将其删除,但这是“已接受”的答案。我会发表我的意见。 我不再提倡这样做。 相反,我会将所有模板都分成单独的HTML文件。有些人建议异步加载这些文件(Requ