zoukankan      html  css  js  c++  java
  • yui3 的auto complete

    YUI 3 auto complete 提供了两种使用方式:插件(plug) 和实例化

    1.插件方式

    HTML部分:

    <div class="yui3-skin-sam">
        <input id="ac-input">
    </div>
    

    JS部分:

    YUI().use("autocomplete", function (Y) {
        var inputNode = Y.one('#ac-input'),
            tags = [
              'css',
              'html',
              'js',
              'yui'
            ];
        inputNode.plug(Y.Plugin.AutoComplete, {
            source: tags,
            resultHighlighter: 'startsWith',
        });
        inputNode.on('focus', function () {
            inputNode.ac.sendRequest('');
        });
    });
    

    这里使用的数据源tags,就是一个简单的数组,实际应用可能使用的是远程数据库的结果。

    给输入框节点安装上AutoComplete 插件后,inputNode 会自动生成一个 ac 对象,通过inputNode.ac.on(EventName,fn)来监听事件和绑定回调函数

    若果希望,键盘导航,inputNode 中的值会跟着变化

        inputNode.ac.on("activeItemChange",function(e){
            if(e.newVal){
                this.set("value",e.newVal.get("text"),{src:"user"});
                //console.log("active change");
            }
        });
    

    需要注意的是,this.set("value",e.newVal.get("text"),{src:"user"});

    第三个参数是一个对象,src,表示这种改变是来自何处,Autocomplete 会区别处理来自用户的输入和非用户的输入,这里官方的API没有作说明,折腾了好长时间!的确YUI好是好,可是它的文档会让一般耐心的人会崩溃掉

    YUI().use("autocomplete", function (Y) {
        var inputNode = Y.one('#ac-input'),
            tags = [
              'css',
              'html',
              'js',
              'yui'
            ];
        inputNode.plug(Y.Plugin.AutoComplete, {
            source: tags,
            resultHighlighter: 'startsWith',
        });
        // list of tag suggestions.
        inputNode.on('focus', function () {
            inputNode.ac.sendRequest('');
        });
         inputNode.ac.on("activeItemChange",function(e){
            if(e.newVal){
                this.set("value",e.newVal.get("text"),{src:"user"});
                //console.log("active change");
            }
        });
    });
    

      

     如果还要支持鼠标hover时,将hover的项放入inputNode

         inputNode.ac.on("hoveredItemChange",function(e){
            if(e.newVal)
              this.set("activeItem",e.newVal);      
        })    
       
    

     

     数据源是通过ajax获得的,需要添加 "datasource-io","datasource-jsonschema"这些包

             	var ds = new Y.DataSource.IO({
                 	source : "/search.html"
             	}),
             	listTemplate ='<div><span class="suggest">{sug}</span><span class="description">{des}</span></div>';
             	ds.plug({fn : Y.Plugin.DataSourceJSONSchema, cfg : {
                 	schema : {
                     	resultListLocator : "results",
                     	resultFields: [{key:"sug"},{key:"des"}]
                 	}
             	}});  
    

     

     将上面的 source:tags 换成source:ds

    search.html 返回的数据格式:{"results":[{"sug":"sug1","des":"des1"},{"sug":"sug2","des":"des2"}]} ,与schema中描述相对应

    另外,一种使用autocomplete 的方式就是作为一个类进行实例化,可以查看官方的文档 http://yuilibrary.com/yui/docs/autocomplete/#as-a-class

    
    
    
    
    
    
    
  • 相关阅读:
    UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
    UVa 1658 (拆点法 最小费用流) Admiral
    UVa 11082 (网络流建模) Matrix Decompressing
    UVa 753 (二分图最大匹配) A Plug for UNIX
    UVa 1451 (数形结合 单调栈) Average
    UVa 1471 (LIS变形) Defense Lines
    UVa 11572 (滑动窗口) Unique Snowflakes
    UVa 1606 (极角排序) Amphiphilic Carbon Molecules
    UVa 11054 Wine trading in Gergovia
    UVa 140 (枚举排列) Bandwidth
  • 原文地址:https://www.cnblogs.com/wewe/p/2246495.html
Copyright © 2011-2022 走看看