2017-01-22 49 views
0

我无法通过模板中的索引访问EmberArray。这是我的路线如何通过Ember中的索引访问模型阵列

model(){ 
    return RSVP.hash({ 
    games: this.store.findAll('game') 
    }) 
} 

的一部分,这是模板

<div> 
    First game: {{model.games.[0].name}} 
</div> 

的一部分有没有输出被渲染。虽然如果我重复使用它

{{#each model.games as |game|}} 
    <div>{{game.name}}</div> 
{{/each}} 

这工作正常。任何想法我可能做错了什么,或者我应该做什么不同?

谢谢

回答

1

您可以使用firstObject方法。

{{model.games.firstObject.name}} 
+0

谢谢,是的,工作。还有什么想法我可以如何访问第二个元素? –

+0

我认为model.games.1.name应该可以工作 –

+0

不,它似乎没有工作。 –

2

如果你不想遍历所有的项目,如果你不介意构成dierctly模板有点逻辑的,ember-composable-helpers插件可能会在访问一个具体的项目来非常有用,例如给定数组使用object-at,来自文档:

返回数组给定索引处的对象。

符号:

{{object-at index array}}

它(在你想要显示的第二个项目的名称的情况下)将是:

{{object-at 1 model.games}}

+0

这看起来很有趣,谢谢。我如何访问给定对象上的属性?{{(object-at 1 model.games).name}}? –

+0

您可以使用[get](http:// emberjs.com/api/classes/Ember.Templates.helpers.html#method_get)helper。 '{{get(object-at 1 model.games)'name'}}' 没有什么限制你完成模板助手的构建。看一看另一个来自于ember-composable-helpers的例子: '{{take 5(sort-by“lastName”“firstName”(filter-by“active”array))}}'。因此,名称**可组合** :)是不是很漂亮? :) – Pavol

1

您可以创建一个帮手。事情是这样的:

{{get (array-index model.games 1) 'name'}} 

附注:

// app/helpers/array-index.js 
import Ember from 'ember'; 

export default Ember.Helper.helper(function ([array, index]) { 
    return array !== undefined && array[index] !== undefined ? array[index] : undefined; 
}); 

与扎堆使用它正如我们正在讨论从Ember Data返回的集合,这可能不是纯粹的js数组,但类似于ArrayProxy。在这种情况下,您可能需要使用它的方法objectAt

// app/helpers/array-index.js 
import Ember from 'ember'; 

export default Ember.Helper.helper(function ([array, index]) { 
    return array && array.objectAt ? array.objectAt(index) : (array && array[index]); 
}); 
+0

哦,这看起来不错!谢谢,可能会给你一个机会。 –