在Ember 1.13及更高版本中,当迭代字符串数组时,我应该使用哪个键?

Ada*_*hts 18 ember.js ember-cli

在Ember 1.13中,以下代码生成警告:

{{#each widgetNames as |widgetName|}}
  {{component widgetName removeWidget="removeWidget"}}
{{/each}}
Run Code Online (Sandbox Code Playgroud)

其中widgetNames是父控制器中的字符串数组.

widgetNames: []
Run Code Online (Sandbox Code Playgroud)

在恩伯1.13我现在得到这个警告:

警告:在{{each}}未指定密钥的情况下使用可能会导致异常行为.请指定一个key标识正在迭代的每个项目的唯一值.例如{{each model key="@guid" as |item|}}.

这很容易修复您典型的模型场景,但如何为字符串数组指定键?

编辑:当迭代字符串数组时,此问题处理您现在在Ember 1.13中获得的警告.如果你点击这个警告你没有明确地寻找@index参数,比如在emberjs中的#each中访问索引.事实上,Artych的答案显示了两个可能的使用密钥,这些密钥与emberjs中#each中的访问索引的答案不相关或存在,因为这是@index参数本身特有的.

art*_*ych 31

更新(Jun,18) 在Ember 1.13.2 key="@identity"中使用默认值,以防止用户必须key=为每次{{each}}调用指定一个.

@guid并且@item不赞成使用新的默认值.

https://github.com/emberjs/ember.js/releases/tag/v1.13.2 https://github.com/emberjs/ember.js/pull/11461

=================回答Ember 1.13,1.13.1 =========

你可以使用key="@index"key="@item".

key (docs)有一些特殊值:

  • @index - 数组中项的索引.
  • @item - 数组本身的项目.这只能用于字符串或数字的数组.
  • @guid- 为每个对象生成唯一标识符(使用Ember.guidFor).

    {{#each widgetNames key="@index" as |widgetName|}}
       {{component widgetName removeWidget="removeWidget"}}
    {{/each}}
    
    Run Code Online (Sandbox Code Playgroud)