0

我正在尝试动态设置 Ember.Select 的 contentBinding。内容是从 ajax 调用加载的。didInsertElement在从 ajax 调用返回数据之前在 Select 上调用。然后我得到一个错误:

未捕获的错误:断言失败:无法在未定义的对象上调用具有“长度”的 get。

数据最终被加载并填充,但初始错误终止了didInsertElement对页面上任何后续 Ember.Selects 的调用。

我正在使用 didInsertElement 方法来设置selected.js。因为 didInsertElement 调用从未运行,所以插件设置不正确。

关于这是一个 ember bug 还是我误解了什么的任何想法?

编辑

错误发生在标准 Ember.Select 视图上:

Ember.Select prompt="Select child" class="input-medium search" selectionBinding=controller.studentFilter contentBinding=controller.students optionValuePath=content.id optionLabelPath=content.name

controller.students 是对通过 ajax 调用加载的数据的绑定。

这会停止对 didInsertElement 的任何进一步处理,并且它永远不会调用我需要的实例,这会在 DOM 中稍后发生,如下所示:

FP.ChosenMultipleSelect = Em.Select.extend
    attributeBindings: [ 'multiple' ]

    didInsertElement: ->
        @._super()
        @.$().chosen().change( (evt, data) =>
          if data.selected
            @get('controller.selectedStudents').pushObject(data.selected)
          if data.deselected
            remaining = @get('controller.selectedStudents').reject( (s) ->
              s is data.deselected
            )
        )

    selectionChanged: (->
        @.$().trigger('liszt:updated')
    ).observes('selection')

错误发生在:

  viewCollection.forEach(function(v) {
    v.transitionTo('inDOM');
    v.propertyDidChange('element');
    v.triggerRecursively('didInsertElement'); <<<<<<<<HERE ember.js line 17423
  });

谢谢,

马丁

环境:

DEBUG: ------------------------------- ember.js:349
DEBUG: Ember.VERSION : 1.0.0-rc.3 ember.js:349
DEBUG: Handlebars.VERSION : 1.0.0-rc.3 ember.js:349
DEBUG: jQuery.VERSION : 1.8.3 ember.js:349
DEBUG: ----------------------------

堆:

Uncaught Error: assertion failed: Cannot call get with 'length' on an undefined object. ember.js:52
Ember.assert ember.js:52
get ember.js:1996
Ember.Select.Ember.View.extend._changeSingle ember.js:22287
Ember.Select.Ember.View.extend._change ember.js:22238
Ember.Select.Ember.View.extend._triggerChange ember.js:22279
sendEvent ember.js:2432
Ember.Evented.Ember.Mixin.create.trigger ember.js:10398
Ember.CoreView.Ember.Object.extend.trigger ember.js:14348
superWrapper ember.js:1044
Ember.View.Ember.CoreView.extend.triggerRecursively ember.js:15842
superWrapper ember.js:1044
get ember.js:17424
Ember.EnumerableUtils.forEach ember.js:1526
ViewCollection.forEach ember.js:14440
insertViewCollection ember.js:17421
Ember.merge.ensureChildrenAreInDOM ember.js:17407
Ember.ContainerView.Ember.View.extend._ensureChildrenAreInDOM
4

0 回答 0