在 Handlebars 模板中迭代对象
Posted
技术标签:
【中文标题】在 Handlebars 模板中迭代对象【英文标题】:Iterate object in Handlebars template 【发布时间】:2014-10-18 22:41:23 【问题描述】:如何在 Ember 应用程序中迭代车把模板中的对象?
<div class="alert alert-danger">
<strong>We couldn't create this Company.</strong>
#each errors
<p>this</p>
/each
</div>
console.log(response.errors);
Object 0: "Name can't be blank", 1: "Zip code can't be blank", 2: "Company type can't be blank", 3: "Address line can't be blank", 4: "Country can't be blank", 5: "State can't be blank"
我在控制台中得到的错误是:
未捕获的错误:断言失败:#each 循环的值必须 成为一个数组。您通过了0:姓名不能为空,1:邮政编码不能为 空白,2:公司类型不能为空,3:地址行不能为空, 4:国家不能为空,5:国家不能为空
有什么建议吗?
【问题讨论】:
将错误重构为数组 你看我下面的回答了吗?您是否愿意详细说明它如何满足或不满足您的要求,因为问题仍然悬而未决? 【参考方案1】:正如您的控制台错误所述,each
帮助程序仅适用于数组,因此它不能直接适用于您的 errors
对象。但是,您可以为errors
对象创建一个计算属性,并在属性内部使用jQuery.map(或类似的映射函数)将该对象映射到一个数组。
errorsArray: function()
return $.map(errors, function( value, key )
return value;
);
.property('errors')
【讨论】:
是的,但是很遗憾,当errors
中的属性被添加、更改或删除时,这个属性不会更新,除非你调用notifyPropertyChange
。
@torazaburo,这不是规定的要求,但你是对的。有大量的计算属性宏将允许自动转换一种或另一种,但我所知道的一切都不会允许像数组一样对待对象。一个对象在某些方面可以表现得像一个关联数组,但最重要的是它不是一个。也许可以编写一个mixin
来创建必要的observes
设置,但是当你完成所有这些时,你不得不想知道为什么不将模型重新塑造成一个数组。
是的,我并不是要说您不需要将对象重新整形为数组-您这样做是为了#each
覆盖它。我只是指出需要一些额外的机制来保持数组映射是最新的。以上是关于在 Handlebars 模板中迭代对象的主要内容,如果未能解决你的问题,请参考以下文章