【问题标题】:jquery ui autocomplete: navigating json objectsjquery ui 自动完成:导航 json 对象
【发布时间】:2012-05-08 11:11:04
【问题描述】:

Paz 的出色回答让我在本周通过自动完成 jQuery UI 交易度过了一个艰难的补丁。

说了这么多,如果您的 json 响应中有两个不同的“基础”对象,如何选择正确的 json 响应。

简单地说,我有一个由 Pitch 和 User 两个模型组成的 ruby​​ 实例变量。我想根据这个实例变量自动完成。 json响应是,说

[{"user":{"id":1,"name":"Blah Hugo"}},
{"user":{"id":3,"name":"Blaz Foobar"}},
{"pitch":{"id":2,"name":"Blasters On Business Apparel"}}]

自动完成的 javascript 文件现在看起来像这样,它可以工作:

.data( "autocomplete" )._renderItem = function( ul, item ) {
  return jQuery( "<li></li>" )
  .data( "item.autocomplete", item )
  .append( "<a>" + (item.user ? item.user.name : item.pitch.name) + "</a>" )
  .appendTo( ul );
};

我的问题还是我不​​得不使用的这个三元组。 item[0].name 不起作用,item.item[0].name 也不起作用如果您不知道它们的名称,是否无法获得通用的“用户”或“音高”?

虽然其中一个会。你说什么?

【问题讨论】:

    标签: javascript jquery jquery-ui jquery-autocomplete


    【解决方案1】:

    我不认为你所拥有的有什么问题,但可能会有轻微的改进:

    .data("autocomplete")._renderItem = function(ul, item) {
        item = item.user || item.pitch;
    
        return jQuery("<li></li>")
            .data("item.autocomplete", item)
            .append("<a>" + item.name + "</a>")
            .appendTo(ul);
    };
    

    【讨论】:

      【解决方案2】:

      您可以尝试使用||(逻辑或)来简化您在.append() 方法中的三元运算符。

      这是你想要的吗?

      .data( "autocomplete" )._renderItem = function( ul, item ) {
          item = item.user || item.pitch || {name:""};
          .append( "<a>" + item.name + "</a>" )
          return jQuery( "<li></li>" )
          .data( "item.autocomplete", item )
          .append( "<a>" + item.name  + "</a>" )
          .appendTo( ul );
      };
      

      这将返回参数列表中的第一个“非假”值;在这种情况下item.user.nameitem.pitch.name。在这种情况下,如果您的 JSON 对象具有 user 属性,则将返回 name 值。如果 JSON 对象具有 pitch 属性,则将返回 name 值。如果这两个操作都返回undefined,则会返回一个空白字符串并附加到a 标记中。

      answer 提供了有关使用和特殊情况的更多信息,以便在使用“OR”方法时牢记在心。

      更新:修复了null 异常可能性。

      【讨论】:

      • 如果item.userundefinednull 会抛出异常
      猜你喜欢
      • 2013-11-24
      • 2011-02-26
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多