选择Ember js中的默认值

时间:2013-03-25 15:04:33

标签: ember.js

大家好我有模特Currency。我有字段name:stringdefault:boolean。在我的数据库中,只有一条记录可以有默认值,我希望在select标签中选择此记录。

示例:

name: Eur default:false

name: USD default: true

name: RUR default: false

我希望:

<selected>
  <option>Eur</option
  <option selected=selected>USD</option
  <option>RUR</option
</selected>

Route.js

EmberMoney.IncomesRoute = Ember.Route.extend
  model: ->
    EmberMoney.Income.find()
  setupController: (controller) ->
    controller.set('currencies', EmberMoney.Currency.find());

incomes.handlebars

// Some output with Incomes records

{{view Ember.Select
       contentBinding="controller.currencies"
       optionLabelPath="content.name"
       optionValuePath="content.id"}}

1 个答案:

答案 0 :(得分:1)

您可以继承Ember.Select并覆盖selection,如下所示:

EmberMoney.Select = Ember.Select.extend({
    selection: Ember.computed(function (key) {
      var content = this.get('content');
      if (!content || !content.length) return null;

      return content.findProperty('default', true)
    }).property('content.[]')
});

由于子类中的selection没有value参数,因此只要更改选择,计算属性就会永久替换为该实例。

请注意,如果您为selection设置绑定,则selection几乎会立即被覆盖,而您必须在源对象上定义此属性或使其更复杂:

EmberMoney.Select = Ember.Select.extend({
    selection: Ember.computed(function (key, value) {
      if (value === undefined || Ember.isNone(value)) {
          var content = this.get('content');
          if (!content || !content.length) return null;

          return content.findProperty('default', true)
      } else {
        return value;
      }
    }).property('content.[]')
});