Ember.select中的selection属性在循环中不起作用

时间:2014-01-03 17:39:27

标签: ember.js ember-data

我在循环中选择了视图,我想在下拉列表中设置默认选择。我尝试设置“值”属性以及“选择”属性,但没有任何对我有用。我试图创建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/

2 个答案:

答案 0 :(得分:1)

这是旧版Ember的一个问题,它被修复到介于1.0+和1.2之间

http://emberjs.jsbin.com/ODaKIjIw/1/edit

答案 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中定义事物时,最好在那里这样做。我以前依赖计算属性时遇到绑定问题。获得的经验:)