jQuery UI Autocomplete的"源"回调中的"响应"和"请求"参数是什么?

Str*_*rry 8 jquery jquery-ui jquery-ui-autocomplete

我正在查看自动完成教程,我有几个问题:http://jqueryui.com/demos/autocomplete/#option-disabled

$( "#tags" )
            // don't navigate away from the field on tab when selecting an item
            .bind( "keydown", function( event ) {
                if ( event.keyCode === $.ui.keyCode.TAB &&
                        $( this ).data( "autocomplete" ).menu.active ) {
                    event.preventDefault();
                }
            })
            .autocomplete({
                minLength: 0,
                source: function( request, response ) {
                    // delegate back to autocomplete, but extract the last term
                    response( $.ui.autocomplete.filter(
                        availableTags, extractLast( request.term ) ) );
                },
                focus: function() {
                    // prevent value inserted on focus
                    return false;
                },
                select: function( event, ui ) {
                    var terms = split( this.value );
                    // remove the current input
                    terms.pop();
                    // add the selected item
                    terms.push( ui.item.value );
                    // add placeholder to get the comma-and-space at the end
                    terms.push( "" );
                    this.value = terms.join( ", " );
                    return false;
                }
            });
Run Code Online (Sandbox Code Playgroud)

所以我理解源的参数是requestresponse.这些保留的关键字是?在google中键入此内容时,我找不到任何内容.我不清楚这里传递的请求和响应是什么.请求只是抓住输入?我在哪里可以阅读更多内容?

jos*_*736 24

不,request或者response不是保留关键字 - 如果是,则不能将它们用作函数参数名称.

这里发生的事情很简单,如果你在Node中做任何事情,你会看到模式.它是异步JavaScript.

你正在传递一个匿名函数source.只要自动完成需要查询数据源(换句话说,用户输入某些内容),就会调用此函数.

函数的参数是requestresponse. request只是信息自动完成请求; request.term是查询(用户键入的内容).这取决于你如何实现搜索 - 也许你有一个可能的局部变量,或者你可能会对服务器进行AJAX调用.

现在重要的部分:如果你正在进行AJAX调用,那么你不能只是return一个值,source()因为函数将在AJAX调用完成之前很久就返回.这就是为什么有一个response参数.

response是传递给source()函数的函数引用,只要您有对请求的答案,就会调用该函数.通过闭包的魔力,您可以从AJAX回调中调用此函数.

response(可能不那么令人困惑地命名callback)期望一个字符串或具有labelvalue属性的对象的数组.它会在自动完成下拉菜单中显示这些结果.

把它们放在一起:

$('selector').autocomplete({
    ...
    source: function(request, response) {
        // calculate results for a query.
        response([{ label: 'Example', value: 'ex'  }]);
    }
});
Run Code Online (Sandbox Code Playgroud)


Jon*_*Jon 15

request并且response只是代码作者选择赋予分配给source自动完成小部件选项的回调的两个形式参数的名称:

只需指定源选项,即可自定义自动完成功能以使用各种数据源.数据源可以是:

  • 包含本地数据的数组
  • 一个String,指定一个URL
  • 回调

第三种变体即回调提供了最大的灵活性,可用于将任何数据源连接到自动完成.回调有两个参数:

  • 一个请求对象,具有一个名为"term"的属性,它引用当前文本输入中的值.例如,当用户在城市字段中输入"new yo"时,自动完成术语将等于"new yo".
  • 一个响应回调,它要求一个参数包含要向用户建议的数据.应根据提供的术语过滤此数据,并且可以采用上述任何简单本地数据格式(String-Array或具有标签/值/两者属性的Object-Array).在提供自定义源回调以处理请求期间的错误时,这很重要.即使遇到错误,也必须始终调用响应回调.这可确保窗口小部件始终具有正确的状态.