如何访问 ember 模板中的数组位置?
How to access an array position in a ember template?
我在 Ember 中尝试做一件简单的事情时遇到了一些挫折。
我知道所有的混乱都来自于从模板中分离逻辑,但我认为我想要实现的目标并不那么昂贵。
我有一个模型 returns 我有一个项目列表,这些项目有一个相关的 属性 并且取决于 属性 的值是否重复,模板应该显示一些东西。
我返回的数据应该是这样的:
[{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>
我的第一个想法是:"Well, I keep the value of the actual loop on a variable, and compare in the next loop. If it's different override the value."
由于我们不能使用 "if" 来比较两个变量,因此我必须创建一个组件来进行比较。这样那部分问题就解决了。
我现在面临的是如何跟踪最后一个循环值,因为我的组件需要它与实际值进行比较。
我无法使用任何这些选项访问循环内的某个元素:
{{#each model as |element key|}}
{{model.0.text}}
{{model[0].text}}
{{model[key-1].text}} <--- That would be awesome if works :D
{{/each}}
有什么想法吗?也许另一种解决问题的方法?
我的建议是在 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 更新时更新!
如果您想遍历数组模型,那么您可以执行以下操作:
{{#each model as |item|}}
{{index}}
{{item.text}}
{{item.nested_property.value}}
{{/each}}
如果你想获取数组模型的最后一个元素,你可以执行以下操作:
{{model.lastObject}}
如果你想获取数组模型的特定元素,你可以执行以下操作:
{{get model '2'}}
一切都很简单:)
P.S。为此
你需要使用最新的ember
非常感谢@Bek 的回答,因为它让我走上了正确的轨道。我把它写在这里只是为了谷歌员工。
使用第三个选项是工作的一部分,要在 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}}
我在 Ember 中尝试做一件简单的事情时遇到了一些挫折。
我知道所有的混乱都来自于从模板中分离逻辑,但我认为我想要实现的目标并不那么昂贵。
我有一个模型 returns 我有一个项目列表,这些项目有一个相关的 属性 并且取决于 属性 的值是否重复,模板应该显示一些东西。
我返回的数据应该是这样的:
[{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>
我的第一个想法是:"Well, I keep the value of the actual loop on a variable, and compare in the next loop. If it's different override the value."
由于我们不能使用 "if" 来比较两个变量,因此我必须创建一个组件来进行比较。这样那部分问题就解决了。
我现在面临的是如何跟踪最后一个循环值,因为我的组件需要它与实际值进行比较。
我无法使用任何这些选项访问循环内的某个元素:
{{#each model as |element key|}}
{{model.0.text}}
{{model[0].text}}
{{model[key-1].text}} <--- That would be awesome if works :D
{{/each}}
有什么想法吗?也许另一种解决问题的方法?
我的建议是在 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 更新时更新!
如果您想遍历数组模型,那么您可以执行以下操作:
{{#each model as |item|}}
{{index}}
{{item.text}}
{{item.nested_property.value}}
{{/each}}
如果你想获取数组模型的最后一个元素,你可以执行以下操作:
{{model.lastObject}}
如果你想获取数组模型的特定元素,你可以执行以下操作:
{{get model '2'}}
一切都很简单:) P.S。为此
你需要使用最新的ember非常感谢@Bek 的回答,因为它让我走上了正确的轨道。我把它写在这里只是为了谷歌员工。
使用第三个选项是工作的一部分,要在 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}}