下划线如何替换变量?
How does underscore replace variables?
我在代码中有以下行:
terminalsListHtml += this.compiled(_.extend(this.terminals[i], {clazz: 'all'}, obj));
执行这一行的行为令我感到惊讶。
我计算 this.compiled
方法的参数值。
它看起来像这样:
更多详情:
compiled: _.template($('#terminal-template').text())
让 return 到第一行谁的结果让我感到惊讶:
return结果如下:
this.compiled(_.extend(this.terminals[i], {clazz: 'all'}, obj));
"
<li data-terminal-id="201" class="">
<label>
<input type="checkbox" name="terminal" class="all" data-terminal-id="201" />
<a href="#" title="" class="image"><img
src="getMediumThumbnail/1"
alt=""/></a>
<h3>Second
<small>Lenina, 5</small>
</h3>
<p>Second</p>
<p class="count">Проходимость: <span>10</span> чел./час</p>
<p class="count">Стоимость: <span>5</span> руб./час</p>
<p class="count">Количество свободных слотов: <span>10</span> </p>
</label>
</li>
"
我们可以看到 {{imageId}}
被替换为 1
。
我不明白这个 1
在哪里。
请澄清。
P.P.S.
抱歉是截图而不是复制的代码。我想粘贴代码,但效果不佳。
这一行:
compiled: _.template($('#terminal-template').text())
将一个字符串(带有id="terminal-template"
的元素的文本内容)转换为一个可以稍后计算的函数:http://underscorejs.org/#template
然后调用 this.compiled( object )
渲染模板(调用之前编译的模板函数),并将 object
设置为上下文,因此如果对象有一个键 imageId
它将是替换模板字符串中的 {{imageId}}
。看起来从 _.extend(this.terminals[i], {clazz: 'all'}, obj)
返回的对象有那个键,它等于 1
.
根据您提供的屏幕截图判断,它可能会生成 <img src="getMediumThumbnail/undefined" ... />
。
但是 imageId
可能来自对象的原型,甚至可能来自全局范围(已在评论中的讨论中确认:window.imageId == 1
)。
编辑:奇怪的是下划线仅在使用 _.templateSettings
更改语法时到达全局范围:http://jsfiddle.net/hoy9ga0d/ - 使用默认值 <%= variable %>
不会呈现全局变量,但 {{ variable }}
会。
我在代码中有以下行:
terminalsListHtml += this.compiled(_.extend(this.terminals[i], {clazz: 'all'}, obj));
执行这一行的行为令我感到惊讶。
我计算 this.compiled
方法的参数值。
它看起来像这样:
更多详情:
compiled: _.template($('#terminal-template').text())
return结果如下:
this.compiled(_.extend(this.terminals[i], {clazz: 'all'}, obj));
"
<li data-terminal-id="201" class="">
<label>
<input type="checkbox" name="terminal" class="all" data-terminal-id="201" />
<a href="#" title="" class="image"><img
src="getMediumThumbnail/1"
alt=""/></a>
<h3>Second
<small>Lenina, 5</small>
</h3>
<p>Second</p>
<p class="count">Проходимость: <span>10</span> чел./час</p>
<p class="count">Стоимость: <span>5</span> руб./час</p>
<p class="count">Количество свободных слотов: <span>10</span> </p>
</label>
</li>
"
我们可以看到 {{imageId}}
被替换为 1
。
我不明白这个 1
在哪里。
请澄清。
P.P.S.
抱歉是截图而不是复制的代码。我想粘贴代码,但效果不佳。
这一行:
compiled: _.template($('#terminal-template').text())
将一个字符串(带有id="terminal-template"
的元素的文本内容)转换为一个可以稍后计算的函数:http://underscorejs.org/#template
然后调用 this.compiled( object )
渲染模板(调用之前编译的模板函数),并将 object
设置为上下文,因此如果对象有一个键 imageId
它将是替换模板字符串中的 {{imageId}}
。看起来从 _.extend(this.terminals[i], {clazz: 'all'}, obj)
返回的对象有那个键,它等于 1
.
根据您提供的屏幕截图判断,它可能会生成 <img src="getMediumThumbnail/undefined" ... />
。
但是 imageId
可能来自对象的原型,甚至可能来自全局范围(已在评论中的讨论中确认:window.imageId == 1
)。
编辑:奇怪的是下划线仅在使用 _.templateSettings
更改语法时到达全局范围:http://jsfiddle.net/hoy9ga0d/ - 使用默认值 <%= variable %>
不会呈现全局变量,但 {{ variable }}
会。