我在Ember做一件简单的事情时遇到了一些挫折
我知道所有的混乱来自于从模板中分离逻辑,但我认为我想要实现的并不是那么昂贵。
我有一个模型,它返回一个项目列表,这些项目具有相关属性,并且取决于该属性的值是否重复,模板应该显示或不显示。
我返回的数据应如下所示:
[{id :0,
text:"Element 0",
nested_property: {
value:'Value 1'
}
},{id :1,
text:"Element 1",
nested_property: {
value:'Value 1'
}
},{id :2,
text:"Element 2",
nested_property: {
value:'Value 2'
}
},{id :3,
text:"Element 3",
nested_property: {
value:'Value 2'
}
},{id :4,
text:"Element 4",
nested_property: {
value:'Value 1'
}
}]
我想要制作的是这样的:
<ul>
<li>
<span>Value 1</span>
<span>Element 0</span>
</li>
<li>
<span>Element 1</span>
</li>
<li>
<span>Value 2</span>
<span>Element 2</span>
</li>
<li>
<span>Element 3</span>
</li>
<li>
<span>Value 1</span>
<span>Element 4</span>
</li>
</ul>
我的第一个想法是:“好吧,我将实际循环的值保留在变量上,并在下一循环中进行比较。如果不同,则覆盖该值。”
由于我们不能使用“if”来比较两个变量,我必须创建一个组件来做到这一点。这样就解决了部分问题
我现在面临的是如何跟踪最后一个循环值,因为我的组件需要它与实际值进行比较。
我无法使用以下任何选项访问循环内的某个元素:
{{#each model as |element key|}}
{{model.0.text}}
{{model[0].text}}
{{model[key-1].text}} <--- That would be awesome if works :D
{{/each}}
有什么想法?也许是另一种解决问题的方法?
答案 0 :(得分:2)
如果您想迭代数组模型,那么请执行以下操作:
{{#each model as |item|}}
{{index}}
{{item.text}}
{{item.nested_property.value}}
{{/each}}
如果你想获得数组模型的最后一个元素,你可以这样做:
{{model.lastObject}}
如果您想获得数组模型的特定元素,请执行以下操作:
{{get model '2'}}
一切都很简单:) 附:你需要为这个
使用最新的余烬答案 1 :(得分:1)
非常感谢@Bek的回答,因为它让我走上正轨。我只是为了googlers而在这里写下来
使用第三个选项构成作业的一部分并在ember标签内使用它,它必须在括号之间完成:
{{ log (get model 1) }}
我需要的是访问动态部分和固定字符串的串联以指示对象属性,我不得不使用:
{{ log (get model (concat variable 'fixed.string')) }}
至少,但不是最后......因为我需要在实际位置之前访问位置,所以我应该在其中使用数学运算。并且没有内置帮助器来获取它所以我在Math Ember Helper找到它并且最终代码看起来像这样:
{{#each model as |item index|}}
{{ log (get model (concat (math key '-' 1) 'nested_property.value')) }}
{{/each}}
答案 2 :(得分:0)
我的建议是在javascript中执行此操作,您可以使用全套工具。
Ember方式的目的是制作一个能够按摩你的数据进行演示的计算器。
binData: Ember.computed('origData', function() {
let origData = this.get('origData');
// use Ember collection utilities, lodash, whatever here
// to bin your data and make it an easy object to loop in hbs
}
现在,您可以在模板中使用binData
。并且,由于Ember的魔力,它会在binData执行时更新!