2012-04-27 65 views
1

Paz的出色答案让我在本周通过jQuery UI自动完成交易完成了一个粗糙的补丁。jquery ui自动完成:浏览json对象

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

简而言之,我有一个由两个模型组成的ruby实例变量,即Pitch和User。我想基于这个实例变量自动完成。 JSON响应是,说

​​

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如果你不知道任何一个的名字,是不是没有办法获得通用的'用户'或'音调'?

我会尽管其中之一会。你说什么?

回答

3

我不认为有太多毛病你有什么,但也许略有改善将是:

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

您可以尝试使用||(逻辑或)来排序您在.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'方法时保留在你的脑海中。

UPDATE:修正了null例外的可能性。

+1

这将抛出一个异常,如果'item.user'是'undefined'或'null' – 2012-04-27 19:00:21

+0

好点。我做了调整。 – arb 2012-04-27 19:20:35