Jquery willInsertElement之前的$()
我有一个Jquery willInsertElement之前的$(),jquery,ember.js,Jquery,Ember.js,我有一个框,它定义了一个“thing”并设置了模型。thing视图正在观察该模型中的一个变化,然后执行一些jQuery噪声作为响应。例如: FooNewView = Ember.View.extend selectedThing: (-> @setNameIfUnset() ).observes('controller.model.thing') setNameIfUnset: () -> console.log 'setNameIfUnset'
框,它定义了一个“thing”并设置了模型。thing
视图正在观察该模型中的一个变化,然后执行一些jQuery噪声作为响应。例如:
FooNewView = Ember.View.extend
selectedThing: (->
@setNameIfUnset()
).observes('controller.model.thing')
setNameIfUnset: () ->
console.log 'setNameIfUnset'
unless @$('#name-field').val().length
# set the name to the name of Thing if not set yet
didInsertElement: () ->
@_super()
Ember.Logger.info("FooNewView::didInsertElement")
问题是,在调用didInsertElement之前,观测者似乎触发了一次,因此,this。$()
此时未定义
我的问题是:处理这个问题的最佳方式是什么?我是否应该在didInsertElement
中设置一个标志,并在setNameIfUnset
中检查该标志?可能只是一个普通的老jQuerychange
监听器添加到了didInsertElement
?最好的方法是在执行observer
中的代码之前检查是否定义了这个。$()
,而不是设置不必要的标志和jQuery监听器。所以代码将是
setNameIfUnset: function(){
if(this.$()) {
console.log('setNameIfUnset');
unless @$('#name-field').val().length
# set the name to the name of Thing if not set yet
}
}