我有下面的简单表,显示用户及其角色。我嵌套的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>
答案 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
;而不是仅仅声明它。