如何获取goog.ui.AutoComplete生成的行数组?

时间:2012-07-11 00:00:48

标签: javascript google-closure-library

我的一位朋友写了一些包含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添加新的方法或属性,因为我的朋友坚决拒绝这样做。

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

1 个答案:

答案 0 :(得分:1)

  1. 创建您的控件

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

  2. 为结果

    创建处理程序

    所以如果blah Url返回一个类似

    的json
    [
     ['apple',
      {name: 'Fuji', url: '..'},
      {name: 'Gala', url: '..'},
      {name: 'Golden Delicious',
       url: '..'}
     ],
     ['berry',
      {name: 'Strawberry', url: '..'},
      {name: 'Blueberry', url: '..'},
      {name: 'Blackberry',url: '..'}
     ]
    ]
    
  3. 您需要在代码中包含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