我有一个用户名数组,我在这样的列表中呈现:
{{#each contacts}}
<div class="name">{{this}}</div>
{{/each}}
这很好用,但后来我尝试从事件中获取用户名:
'click .name': function(e,t){
console.log(this)
}
我得到了这个令人沮丧的对象String {0: "c", 1: "h", 2: "a", 3: "r", 4: "l", 5: "i", 6: "e", length: 7, [[PrimitiveValue]]: "charlie"}
,这使得进行字符串比较非常具有挑战性。任何想法为什么这甚至是一个问题或该怎么办呢?
答案 0 :(得分:12)
通常在Javascript中,上下文必须是对象而不是基元(link)。据推测,contacts
只是一个字符串数组,因此在每个div标签中,这些字符串被加框(即转换为引用类型,在本例中为String对象)。这就是你在这里记录的 - String对象,而不是原始的原语。
您有两种选择:
this.valueOf()
,它将返回原始字符串。[{value: 'nameOne'}, ...
])。这样,您可以将{{this}}
替换为{{value}}
,并在事件处理程序中this
将以您提供的格式返回对象。答案 1 :(得分:9)
我认为当您在模板中使用{{this}}
并且基础数据是字符串文字时,它会转换为String object。出于字符串操作的目的,您将看到没有区别(事实上,当在方法上调用方法时,文字会在后台转换为对象)。但是,当您将其写入控制台时,它看起来很奇怪。您可以这样做:console.log(this.toString());
或console.log(String(this));
。