Ember.Select didInsertElement失败并显示未定义的内容

时间:2013-04-30 06:28:26

标签: ember.js

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

未捕获错误:断言失败:无法在未定义的对象上使用'length'调用get。

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

我正在使用didInsertElement方法来设置chosen.js。因为didInsertElement调用永远不会运行,所以插件设置不正确。

是否有关于这是一个漏洞的错误还是我误解了什么?

修改

错误发生在标准的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

0 个答案:

没有答案