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