繁体   English   中英

jquery ui autocomplete:导航json对象

[英]jquery ui autocomplete: navigating json objects

Paz的优秀答案让我在本周通过自动完成的jQuery UI交易进行了粗略的修补。

所有这一切,如果你在json响应中有两个不同的“基础”对象,如何选择正确的json响应。

简单地说,我有一个ruby实例变量,由两个模型组成,Pitch和User。 我想基于此实例变量自动完成。 比如,json的反应是

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

自动完成javascript文件现在看起来像这样,它只能<snippet>:

.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如果您不知道任何一个名称,是否无法获得通用的“用户”或“推销”?

我会有其中一个会的。 什么说你?

我不认为你的东西有多大的错误,但可能会略有改善:

.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);
};

您可以尝试使用|| (逻辑或)用于在.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标记中。

这个答案提供了有关使用和特殊情况的更多信息,以便在使用“OR”方法时保持在脑海中。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM