我的一位朋友写了一些包含goog.ui.AutoComplete实例的Google Closure代码:http://closure-library.googlecode.com/svn/docs/class_goog_ui_AutoComplete.html
每次这个自动完成功能向服务器发出异步请求时,我必须遍历自动完成生成的所有行,并对每个行执行一些操作。
现在,我正在完成以下工作。
var rows = friendsAutocomplete.rows_;
for (var i = 0; i < rows.length; i++) {
doSomething(rows[i]);
}
这很有效,但是非常糟糕,因为我通过访问私有变量friendsAutocomplete.rows_
打破了抽象障碍。我也无法向friendsAutocomplete
添加新的方法或属性,因为我的朋友坚决拒绝这样做。
如何在不访问私有变量的情况下遍历自动完成功能生成的行?
答案 0 :(得分:1)
创建您的控件
var ac = new goog.ui.AutoComplete.RichRemote(“http:// blah”,inputDomElement);
为结果
创建处理程序所以如果blah Url返回一个类似
的json[
['apple',
{name: 'Fuji', url: '..'},
{name: 'Gala', url: '..'},
{name: 'Golden Delicious',
url: '..'}
],
['berry',
{name: 'Strawberry', url: '..'},
{name: 'Blueberry', url: '..'},
{name: 'Blackberry',url: '..'}
]
]
您需要在代码中包含javascript对象,这些对象将被处理为顶级数组对象中的每个项目。我想这就是你想要的(注意:'apple','berry'匹配JSON结果值)
var apple = function (item) {
...
return makeRichRow_(...)
}
var berry = function (item) {
...
return makeRichRow_(...)
}
和makeRichRow_基本上是您在用户选择项目时附加渲染功能并为项目选择值的位置。您还可以过滤行等
这是一个包含源代码的完整演示。 http://code.google.com/p/closure-library/source/browse/trunk/closure/goog/demos/autocompleterichremote.html?r=43