Javascript Coffeescript中未定义数据(';自动完成';)

Javascript Coffeescript中未定义数据(';自动完成';),javascript,jquery,coffeescript,undefined,Javascript,Jquery,Coffeescript,Undefined,我有一段话: $("#select_sourcer").autocomplete( minLength: 2 source: "/admin/users/list_of_sourcers.json" focus: (event,ui) -> $('#select_sourcer').val(ui.item.full_name) false select: (event,ui) -> $("#select_sour

我有一段话:

$("#select_sourcer").autocomplete(
    minLength: 2
    source: "/admin/users/list_of_sourcers.json"
    focus: (event,ui) -> 
      $('#select_sourcer').val(ui.item.full_name)
      false
    select: (event,ui) -> 
      $("#select_sourcer").val(ui.item.full_name)
      $("#merchant_sourcer_id").val(ui.item.id)
      false
    ).data("autocomplete")._renderItem = (ul, item) ->
      $("<li></li>").data("item.autocomplete", item).append("<a>" + item.full_name_with_status + "</a>").appendTo ul
未定义,无法设置属性。正如本帖所述:

但是,如何在Coffeescript中检查投票结果?

您可以使用:

存在运算符
?.
的访问器变量可用于吸收属性链中的空引用。如果基值可能为null未定义,请使用它,而不是点存取器

因此,如果您正在运行jQuery,并且不确定DOM中是否有
#select_sourcer
,那么您可以将
插入正确的位置:

$("#select_sourcer").autocomplete(
  ...
  ).data("autocomplete")?._renderItem = (ul, item) ->
    #-------------------^
    ...
这将或多或少产生与以下相同的效果:

x = $('#select_sourcer').autocomplete(...).data('autocomplete')
if(x)
    x._renderItem = (ul, item) -> ...
以上只是为了说明,
?。
实际上检查
!=空
而不是一般的错误


只有当DOM中没有
#select_sourcer
时,才有必要这样做,因此如果不需要自动完成程序,您可能希望避免尝试将其绑定到一起;OTOH,有时不在乎它是否存在并绑定起来更容易。

为什么不直接设置_renderitem属性,而不是per.data()?因为它是自动完成链的一部分?我不明白你会怎么做…我的意思是,在你初始化自动完成的选项对象中?在检查了一些来源之后,我想它会起作用的谢谢,谢谢,谢谢。这澄清了很多。
x = $('#select_sourcer').autocomplete(...).data('autocomplete')
if(x)
    x._renderItem = (ul, item) -> ...