Javascript 控制器负载上的余烬负载值
我正在尝试加载一个类型数组,用作选择值。可以使用addSelect操作创建多个选择。下面是我加载数据的方式Javascript 控制器负载上的余烬负载值,javascript,ember.js,ember-data,Javascript,Ember.js,Ember Data,我正在尝试加载一个类型数组,用作选择值。可以使用addSelect操作创建多个选择。下面是我加载数据的方式 genreStrings: function() { var array = []; this.store.findAll("genre").then(function(genres){ genres.forEach(function(genre){ array.push(genre.get('combinedName'));
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" }}
我面临的问题是,当页面加载时加载的第一个select没有值,而使用addSelect操作添加的每个后续select都具有预期的值
我已经试过了。在'init'上,但仍然不起作用
如何为第一次选择设置这些值?第一次,数组是空的,因为您使用异步方式加载数据。解决方案可能是创建一个更新“类型”字段的方法: 此外,我还添加了Ember.computed.map,用于将流派转换为所需格式。您仍然可以使用ES5样式:
genreStrings: function() {
return this.get('genres').map(function(genre) {
return genre.get('combinedName');
});
}).property('genres'),
编辑:
如果要以更大的余烬方式执行此操作,可以将其移动到管线的模型挂钩:
model: function() {
return this.store.findAll("genre");
}
然后,如果您返回承诺,整个路由将等待您的数据被提取,并且在您的控制器中,您将在model属性中拥有它。这是可行的,但是在路由中加载数据可能更容易。
model: function() {
return this.store.findAll("genre");
}