【问题标题】:Ember 1.13 each loop in each loopEmber 1.13 每个循环中的每个循环
【发布时间】:2015-10-06 22:38:59
【问题描述】:

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 的建议构建小提琴之后,我确实理解了我的问题(见答案)。

【问题讨论】:

  • 您已链接到状态的那​​个问题 @guid 和 @item 已弃用,取而代之的是新的默认值。
  • 这只是我的问题,如果您将循环包裹在循环中,new default 将不起作用。如果你有一个“正常”循环,默认值会更容易(因为你不需要做任何事情)。
  • 如果你不使用它,你不需要密钥......
  • @Kitler:如果我不提供密钥,我会收到一个错误......
  • 你能在bin中设置你的例子吗?

标签: ember.js


【解决方案1】:

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

这是已关闭的问题:https://github.com/emberjs/ember.js/issues/11549

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

【讨论】:

【解决方案2】:

经过反复试验,我确实明白了导致错误的原因。

原因
我循环中的一些项目null。 Ember 1.13.x 及更高版本尝试为每个项目添加一个 id。由于 null 没有任何意义,第一个 null-item 获取密钥 null,因为 Ember 提供了一个 nothing-key 来表示无。下面的null-items 也会得到一个 nothing-key,因为 Ember 对每个 null-item 都会这样做。

错误
因为 helper 要求每个项目都有一个唯一的 id,所以 Ember 会抛出一个 Duplicate key found ('(null)') 错误;告诉程序员一些项目具有相同的 id。

解决方案
解决这个问题很容易,只需提供一个空对象 ({}) 而不是 null。由于一个空对象与另一个空对象不同,Ember 将为每个空对象创建一个唯一的 id!


代码示例:Bin

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多