Ember 1.13每个循环中的每个循环

时间:2015-07-17 08:55:37

标签: ember.js

如上所述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提出的小提琴后,我确实理解了我的问题(见答案)。

2 个答案:

答案 0 :(得分:2)

这是v1.13.x中的回归,预计会在补丁中解决,可能是v1.13.6

这是封闭式问题:https://github.com/emberjs/ember.js/issues/11549

合并后的拉取请求:https://github.com/emberjs/ember.js/pull/11861

答案 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