0

我有一个禁用选择器的视图,一旦加载模型,就应该将其设置为 ember-data 中的值。

LocationSelectView: Ember.Select.extend({
    prompt: "Choose location",
    contentBinding: 'controller.locations',
    optionValuePath: 'content.id',
    optionLabelPath: 'content.title',
    valueBinding: 'controller.content.location_id'
})

并且视图在模板中被禁用

{{view view.LocationSelectView disabled="true"}}

只要位置已加载到商店,一切都按预期工作,如果未加载,则内容按预期绑定(我可以通过启用选择器来验证),但所选值保持在“提示” .

我通过在控制器的初始化中预加载位置数据来解决这个问题,但我真的不喜欢这个解决方案。

我怎样才能解决这个问题 ?这是一个错误吗?

4

2 回答 2

0

这里提到了这个问题: https ://github.com/emberjs/ember.js/issues/1333

我的解决方案是在视图中添加一个观察者,如下所示:

preselect: function () {
  var item = this.get('items.firstObject');
  this.set('currentItem', item);
}.observes('items.@each')

假设使用 selectionBinding (我更喜欢)而不是 valueBinding

于 2013-01-24T20:57:12.650 回答
0

我为这个问题开发了一个解决方法。看下面的代码:

App.Select = Ember.Select.extend({
placeholder: '',
allowClear: false,

contentChanged: function() {
    if (this.get('value') === undefined && this.get('_iv') != undefined) {
        var v = this.get('_iv');
        var o = this.get('content').findProperty('id', v);

        if (o) {
            this.set('value', v);
        }
    }
}.observes('content.@each'),

init: function() {
    this._super();
    this.set('_iv', this.get('value'));
},

...

我希望它有帮助

于 2013-08-04T22:51:37.793 回答