[英]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.name
和item.pitch.name
。 在这种情况下,如果您的JSON对象具有user
属性,则将返回name
值。 如果JSON对象具有pitch
属性,则将返回name
值。 如果这两个操作都返回undefined
,则返回一个空字符串并将其附加到a
标记中。
这个答案提供了有关使用和特殊情况的更多信息,以便在使用“OR”方法时保持在脑海中。
更新 :修复了null
异常的可能性。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.