我在循环中选择了视图,我想在下拉列表中设置默认选择。我尝试设置“值”属性以及“选择”属性,但没有任何对我有用。我试图创建jsbin来演示这个问题,但是它给了我完全不同的问题,但我在开发代码中没有看到。
我的控制器定义如下:
App.AnswerController = Ember.ObjectController.extend({
answerLayouts: function () {
return this.get('store').findAll('layout');
}.property(),
selectedAnswerLayout: null,
initialize: function () {
this.set('selectedAnswerLayout', this.get('store').find('layout', this.get('id')));
}.on('init')
});
在我正在做的模板中:
<table>
{{#each answers itemController="answer"}}
<tr>
<td>{{name}}</td>
<td>{{view Ember.Select
content=answerLayouts
optionValuePath="content.name"
optionLabelPath="content.displayName"
class="form-control"
prompt="Answer Layout"
selection=selectedAnswerLayout}}
</td>
</tr>
{{/each}}
</table>
并没有看到answerLayouts是一个数组,但当我检查{{answerLayouts.length}}时,它返回3!
以下是演示此问题的jsbin链接:http://jsbin.com/AcUPIpEl/1/
答案 0 :(得分:1)
这是旧版Ember的一个问题,它被修复到介于1.0+和1.2之间
答案 1 :(得分:0)
好的不得不做一些不同的事情让事情有效。我没有将“answerLayouts”定义为属性,而是将其定义为数组,当控制器初始化时,我填充数组并将selectedAnswerlayout设置为:
App.AnswerController = Ember.ObjectController.extend({
answerLayouts: Ember.A(),
selectedAnswerLayout: null,
initialize: function () {
var self = this,
selectedlayoutId = this.get('id');
this.get('store').find('layout').then(function(data){
data.forEach(function(layout){
self.get('answerLayouts').pushObject(layout);
if(layout.get('id') === selectedlayoutId){
self.set('selectedAnswerLayout',layout);
}
});
});
}.on('init')
});
这是工作的jsbin链接:emberjs.jsbin.com/ODaKIjIw/3。 我已经意识到,当我们可以在init中定义事物时,最好在那里这样做。我以前依赖计算属性时遇到绑定问题。获得的经验:)