Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery willInsertElement之前的$()_Jquery_Ember.js - Fatal编程技术网

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
中检查该标志?可能只是一个普通的老jQuery
change
监听器添加到了
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
   }
}