如上所述here,Ember 1.13需要{{each}}
助手的密钥。自Ember 1.13.2起,默认密钥为@identity
。
现在我正在尝试修复我的代码,我将每个循环嵌套在另一个(显示日历的代码段)中。我收到以下错误:
Uncaught Error: Duplicate key found ('(null)') for '{{each}}' helper, please use a unique key or switch to '{{#each model key="@index"}}{{/each}}'.
但即使我添加@guid
作为键,仍会显示错误。代码:
{{#each weeks key="@guid" as |week|}}
<tr>
{{#each week key="@guid" as |day|}}
<td class="day"></td>
{{/each}}
</tr>
{{/each}}
我不明白。由于@guid
应为每个对象创建唯一标识符,为什么我仍然会收到此duplicate key found
错误?
修改:
我假设Duplicate key found
与嵌套的每个循环有关,这显然是错误的。在试图建立Kitler提出的小提琴后,我确实理解了我的问题(见答案)。
答案 0 :(得分:2)
这是v1.13.x中的回归,预计会在补丁中解决,可能是v1.13.6
答案 1 :(得分:0)
经过反复试验,我确实理解了导致错误的原因。
<强>原因强>
我的循环中的一些项null
。 Ember 1.13.x及以上版本尝试为每个项目添加一个id。由于null
没有任何意义,因此第一个null-item
获取密钥null
,因为Ember提供了 nothing-key 。以下null-items
也会获得无关键,因为Ember为每个null-item
执行此操作。
错误强>
因为帮助器需要每个项目的唯一ID,所以Ember会抛出Duplicate key found ('(null)')
错误;告诉程序员一些项目具有相同的ID。
<强>解决方案强>
修复此操作非常简单,只需提供一个空对象({}
)而不是null
。由于一个空对象与另一个空对象不同,Ember将为每个空对象创建一个唯一的id!
代码示例:Bin。