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

时间:2014-10-01 18:03:35

标签: meteor meteor-blaze

我有一个用户名数组,我在这样的列表中呈现:

{{#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"},这使得进行字符串比较非常具有挑战性。任何想法为什么这甚至是一个问题或该怎么办呢?

2 个答案:

答案 0 :(得分:12)

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

您有两种选择:

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

答案 1 :(得分:9)

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