我正在尝试加载一系列类型,用作选择值。可以使用addSelect操作创建多个选择。这是我加载数据的方式。
genreStrings: function() {
var array = [];
this.store.findAll("genre").then(function(genres){
genres.forEach(function(genre){
array.push(genre.get('combinedName'));
});
});
return array;
}.property(),
然后它就像在模板中一样使用。
{{view "select" content=genreStrings value=genre.name prompt="Select a Genre" }}
我面临的问题是,当页面加载时加载的第一个选择没有值,而使用addSelect操作添加的每个后续选择都具有预期的值。
我尝试了.on('init')
,但这仍然无效。
如何为第一个选择设置这些值?
答案 0 :(得分:0)
第一次,数组只是空的,因为您使用异步方式加载数据。解决方案可能是创建一个更新genres
字段的方法:
genres: null,
genreStrings: Ember.computed.map('genres', function(genre) {
return genre.get('combinedName');
}).property('genres'),
genreStrings: function() {
this.set('genres', []);
this.store.findAll("genre").then(function(genres) {
this.set('genres', genres);
}.bind(this));
}.on('init')
此外,我已添加Ember.computed.map
,将genres
转换为所需格式。您仍然可以使用ES5样式:
genreStrings: function() {
return this.get('genres').map(function(genre) {
return genre.get('combinedName');
});
}).property('genres'),
编辑:
如果你想以更多的Ember方式进行,你可以将它移到路线的模型钩子上:
model: function() {
return this.store.findAll("genre");
}
然后,如果您返回承诺,整个路径将等待您的数据被提取,并且在您的控制器中,您将在model
属性中拥有它。