【问题标题】:#each string in an array with blaze in Meteor#流星中带有火焰的数组中的每个字符串
【发布时间】:2014-11-26 16:01:03
【问题描述】:

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

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

【问题讨论】:

  • 你试过了吗。_id

标签: meteor meteor-blaze


【解决方案1】:

一般来说,在 Javascript 中,上下文必须是一个对象而不是一个原语 (link)。据推测,contacts 只是一个字符串数组,因此在每个 div 标记中,这些字符串被装箱(即转换为引用类型,在本例中为 String 对象)。这就是您在此处记录的内容 - String 对象,而不是您原来的原语。

你有两个选择:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-03
      • 2015-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多