我正在尝试动态设置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