0

我的一个朋友写了一些包含 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因为我的朋友坚决拒绝这样做。

如何在不访问私有变量的情况下遍历自动完成功能生成的行?

4

1 回答 1

1
  1. 创建您的控件

    var ac = new goog.ui.AutoComplete.RichRemote("http://blah", inputDomElement);

  2. 为结果创建处理程序

    所以如果 blah Url 返回一个像

    [
     ['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

于 2012-07-11T21:06:08.527 回答