在Meteor中带有火焰的数组中的#each字符串

Che*_*het 7 meteor meteor-blaze

我有一个用户名数组,我在列表中呈现如下:

{{#each contacts}}
<div class="name">{{this}}</div>
{{/each}}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但后来我尝试从事件中获取用户名:

'click .name': function(e,t){
console.log(this)
}
Run Code Online (Sandbox Code Playgroud)

我得到了这个令人沮丧的对象String {0: "c", 1: "h", 2: "a", 3: "r", 4: "l", 5: "i", 6: "e", length: 7, [[PrimitiveValue]]: "charlie"},这使得进行字符串比较非常具有挑战性.任何想法为什么这甚至是一个问题或该怎么办呢?

ric*_*ilv 12

通常在Javascript中,上下文必须是对象而不是基元(链接).据推测,contacts只是一个字符串数组,所以在每个div标签中,这些字符串被加框(即转换为引用类型,在本例中为String对象).这就是你在这里记录的 - String对象,而不是原始的原语.

您有两种选择:

  1. 如果你使用this.valueOf()它将返回原始字符串.
  2. 或者,考虑使联系人成为一个对象数组(如[{value: 'nameOne'}, ...]).这样,您可以{{this}}使用{{value}}this在事件处理程序中替换,并以您提供的相同格式返回对象.


Dav*_*don 9

我认为当您{{this}}在模板中使用,并且底层数据是字符串文字时,它会被转换为String对象.出于字符串操作的目的,您将看到没有区别(事实上,当在方法上调用方法时,文字会在后台转换为对象).但是,当您将其写入控制台时,它看起来很奇怪.你可以做:console.log(this.toString());console.log(String(this));.