Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 下划线如何替换变量?_Javascript_Templates_Underscore.js_Frontend - Fatal编程技术网

Javascript 下划线如何替换变量?

Javascript 下划线如何替换变量?,javascript,templates,underscore.js,frontend,Javascript,Templates,Underscore.js,Frontend,我有以下代码行: terminalsListHtml += this.compiled(_.extend(this.terminals[i], {clazz: 'all'}, obj)); 这场争吵的行为令我惊讶 我计算这个.compiled方法的参数值。 看起来是这样的: 更多详情: compiled: _.template($('#terminal-template').text()) 让我们回到第一排,谁的结果令我惊讶: 它返回以下结果: this.compiled(_.exte

我有以下代码行:

 terminalsListHtml += this.compiled(_.extend(this.terminals[i], {clazz: 'all'}, obj));
这场争吵的行为令我惊讶

我计算
这个.compiled方法的参数值。
看起来是这样的:

更多详情:

compiled: _.template($('#terminal-template').text())
让我们回到第一排,谁的结果令我惊讶:

它返回以下结果:

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>
"
this.compiled(u.extend(this.terminals[i],{clazz:'all'},obj));
"

第二
列宁纳,5岁
第二

10

"
正如我们所看到的,
{{imageId}
1
取代

我不明白这个
1
需要花多少时间。
请澄清

P.P.S。 很抱歉,屏幕截图而不是复制的代码。我想粘贴代码,但效果不好。

此行:

 compiled: _.template($('#terminal-template').text())
将字符串(具有
id=“terminal template”
的元素的文本内容)转换为可在以后进行计算的函数:

然后调用
this.compiled(object)
object
设置为上下文来呈现模板(调用先前编译的模板函数),因此如果对象具有键
imageId
,则将替换模板字符串中的
{imageId}
。它看起来像是从
.extend(this.terminals[i],{clazz:'all'},obj)
返回的对象具有该键,它等于
1

根据您提供的屏幕截图判断,它可能会生成

但是
imageId
可能来自对象的原型,甚至来自全局范围(这已在注释中的讨论中得到确认:
window.imageId==1


编辑:奇怪的是,下划线仅在使用
.templateSettings
更改语法时才到达全局范围:-使用默认值
不会呈现全局变量,但
{{variable}
会呈现全局变量。

@gstackoverflow是否可以尝试
.extend(this.terminals[i],{clazz:'all'},obj).imageId
window.imageId
并检查其中是否有返回
1
?window.imageId返回1@gstackoverflow正如我所怀疑的,它来自全球范围。它看起来像是范围问题,在我看来,它不应该超出传递给
compiled()
(库中可能有一些检查)的
对象的范围,但这是JS的设计方式。你能提供修复吗?@gstackoverflow不幸的是,我无法修补库,我可以理解为什么检查不在那里-它需要调用
if(context.hasOwnProperty(key))
在每次替换
{key}
时调用
,这将是性能方面的一个缺点。现在,根据JS语言中解析变量的规则,它只解析为
key
的值。您可以
删除window.imageId
如果您知道您将不需要它。请阅读评论: