添加新选项时如何更新Ember.Select?

时间:2014-05-15 21:32:16

标签: ajax select ember.js

我尝试在用户第一次点击时更新选项中的选项(最终这将是ajax调用)。问题是,在第二次单击选择之前,您无法看到在点击时添加的选项。

首先点击:http://i.stack.imgur.com/Dx0d5.png

第二次点击:http://i.stack.imgur.com/0Xirb.png

以下是观点:

App.ArchiveView = Ember.Select.extend({

  selection: null
  initialized: null
  classNames: ['select2 flat']
  optionValuePath: "content.url"
  optionLabelPath: "content.date"
  contentBinding: 'controller.child_reports'

  didInsertElement: ->
    @_super()
    unless @get('initialized')
      @get('controller.child_reports').pushObject(
        {date: 'Latest', url: @get('controller.last_child_report_url')}
      )

  click: ->
    unless @get('initialized')
      @get('controller.child_reports').pushObject(
        {date: '5-15', url: 'sucka'}
      )
      @set('initialized', true)
      #need to rerender or something

  change: ->
    @set('controller.amazon_url', @get('selection.url'))

})

控制器:

App.ReportController = Ember.ObjectController.extend({

  child_reports: null

  init: ->
    @_super()
    @set('child_reports', [])

  amazon_url: ((key, value) ->
    unless value?
      value = @get('model.amazon_url')
    else
      @set('model.amazon_url', value)
    return value
  ).property('model.amazon_url')

  last_child_report_url: ( ->
    @get('model._embedded.last_child_report.amazon_url')
  ).property('model._embedded.last_child_report.amazon_url')

我在@.rerender()行动中尝试click()无济于事。如何在第一次点击时显示添加的选项?

谢谢!

1 个答案:

答案 0 :(得分:0)

简而言之:使用mouseDown代替click。类似的东西:

App.SuperSelect = Ember.Select.extend({
  openedOnce: false,
  mouseDown: function () {
    this._super();
    if (this.get("state") !== "inDOM") {
      return;
    }
    if (this.get("openedOnce")) {
      return;
    }
    this.set("openedOnce", true);
    this.get("controller.model").pushObject(/*Create new model*/);
  }
});

完成工作JSBIN here