奥雷利亚。为什么嵌套的repeat.for select不显示数据?

时间:2018-09-19 06:56:09

标签: nested aurelia

我有下面的简单表,显示用户及其角色。我嵌套的repeat.for遍历角色列表。我的repeat.for =“ role of RoleData”不显示我的数据。你能告诉我为什么吗?仅当我在div标签中添加第3个repeat.for时,它才起作用。

    <tbody>
     <tr repeat.for="user of usersData">
     <td>${user.name}</td>
     <td>
      <select>
       <option repeat.for="role of rolesData">${role.name}</option>
      </select>
     </td>
    </tr>
      <div repeat.for="role of rolesData">
   <tbody>

1 个答案:

答案 0 :(得分:2)

不见你js/ts很难回答,但我很确定是什么导致了您的问题。

我猜测您的VM中有一个rolesData属性,该属性正在AJAX调用中填充。 这意味着页面首次加载时,rolesData仍未定义。 然后,在ajax调用的then中,您可能执行this.rolesData = data或类似的操作。 请注意,即使您在类中声明了名为rolesData的属性,它也不会产生任何影响,除非您实际为其分配了某些东西(即使分配undefined也可以)。

在aurelia中-当您绑定到不存在的属性时,aurelia将为您创建并绑定它。 因此,您永远不会有例外或类似情况。

在您的情况下,您正在绑定到repeat循环中不存在的属性。 在重复中,每次重复都会为当前变量创建一个局部作用域, 绑定到子范围内不存在的属性,则在子范围内创建一个新属性。 因此,即使以后(您实际上在rolesData中填充了东西,也将其填充在父范围中),但每个子级都绑定到一个不同的集合中(每个子级都有自己的范围)。

当您将外部div绑定到同一变量时,会产生一些副作用,导致整个工作正常。 因为外部div在父级作用域中创建了一个变量,现在每个子级都将使用父级作用域中已经存在的相同变量,而不是在受其尊重的范围中创建局部变量。 然后-稍后当您填充相同的变量时-绑定极客,每件事看起来都很好。

TL; DR: 在您的VM中,声明rolesData = undefined;而不是仅仅声明它。