我们知道Extjs4中提供了一个组件叫做“

Combo with Templates and Ajax

” 可以用来动态的查询获取后台的数据,本文讲述的是如何将其稍加改造使其更加符合用户需求。

这是extjs提供的组件我做了截图。

改进部分:

1、模糊查询和后台交互(暂未做到拼音查询和搜索式的查询)

2、根据数据类型(需要提前将数据分类并将数据的分类类型传到前台)

3、展示依然是下拉框的形式。

--------------------------------------------------------------------------------------------------------------------------------------------------------------

下面讲思路:

1、先研究了下该组件的实现:

Ext.require([
    'Ext.data.*','Ext.form.*'
]);

Ext.onReady(function(){

    Ext.define("Post",{
        extend: 'Ext.data.Model',proxy: {
            type: 'jsonp',url : 'http://www.sencha.com/forum/topics-remote.PHP',reader: {
                type: 'json',root: 'topics',totalProperty: 'totalCount'
            }
        },fields: [
            {name: 'id',mapping: 'post_id'},{name: 'title',mapping: 'topic_title'},{name: 'topicId',mapping: 'topic_id'},{name: 'author',mapping: 'author'},{name: 'lastPost',mapping: 'post_time',type: 'date',dateFormat: 'timestamp'},{name: 'excerpt',mapping: 'post_text'}
        ]
    });

    ds = Ext.create('Ext.data.Store',{
        pageSize: 10,model: 'Post'
    });

    panel = Ext.create('Ext.panel.Panel',{
        renderTo: Ext.getBody(),title: 'Search the Ext Forums',width: 600,bodyPadding: 10,layout: 'anchor',items: [{
            xtype: 'combo',store: ds,displayField: 'title',typeAhead: false,hideLabel: true,hideTrigger:true,anchor: '100%',listConfig: {
                loadingText: 'Searching...',emptyText: 'No matching posts found.',// Custom rendering template for each item
                getInnerTpl: function() {
                    return '<a class="search-item" href="http://www.sencha.com/forum/showthread.PHP?t={topicId}&p={id}">' +
                        '<h3><span>{[Ext.Date.format(values.lastPost,"M j,Y")]}<br />by {author}</span>{title}</h3>' +
                        '{excerpt}' +
                    '</a>';
                }
            },pageSize: 10
        },{
            xtype: 'component',style: 'margin-top:10px',html: 'Live search requires a minimum of 4 characters.'
        }]
    });
});

研究了其实现代码方知:

ds是其数据源,而

url : 'http://www.sencha.com/forum/topics-remote.PHP',则是其向后台发送到连接请求路径。

fields:

  fields: [
            {name: 'id',mapping: 'post_text'}

是后台数据字段映射到前台的字段。

而其他的属性配置如:

xtype: 'combo',
可以根据需要进行相应的配置(属性配置跟使用一般的combo一样,这个例子中将下拉的图形样式的属性去掉了,如果要实现跟下拉框同样的效果显示,在api里找相应的属性设置即可)

若实现下拉的样式控制,则要看listconfig了。

listConfig
根据api显示其可设置的仅有10个属性配置项
listConfig : Object
An optional set of configuration properties that will be passed to the Ext.view.BoundList's constructor. Any configuration that is valid for BoundList can be included. Some of the more useful ones are:

Ext.view.BoundList.cls - defaults to empty
Ext.view.BoundList.emptyText - defaults to empty string
Ext.view.BoundList.itemSelector - defaults to the value defined in BoundList
Ext.view.BoundList.loadingText - defaults to 'Loading...'
Ext.view.BoundList.minWidth - defaults to 70
Ext.view.BoundList.maxWidth - defaults to undefined
Ext.view.BoundList.maxHeight - defaults to 300
Ext.view.BoundList.resizable - defaults to false
Ext.view.BoundList.shadow - defaults to 'sides'
Ext.view.BoundList.width - defaults to undefined (automatically set to the width of the ComboBox field if matchFieldWidth is true)

另外在样例中的getInnerTpl方法却没有,怎么办呢? 不急细细看代码可以看到其是 e Ext.view.BoundList 's里的。因为本文强调改造这个下拉框,所以就不往后说boundlist了。

动手改改getInnerTpl里的html就可以了。其中{}里的元素就是对应feilds的mapping代码。因而可以想到如果要更改下拉里的样式,那么就要从这里入手了~~

思路其实很简单,前面说了,要实现的是分类的图标标识,所以后台必然要将分类的类型传递给前台,怎么传递呢?

前面也说了url属性后的url路径即是请求路径,那么具体的请求就更改url就行了。

那如何实现模糊查询呢? 那就自己在后台写啦·~~最简单的sql语句里使用like '%parmas%'就行了。

另外如何设置触发这条url呢?

阅读API不难发现:

minChars :Number

The minimum number of characters the user must type before autocomplete andtypeAheadactivate.

Defaults to4ifqueryMode= 'remote'or0ifqueryMode= 'local',does not apply ifeditable= false.


最后就是美工的活了。前台既然给了类型,那就容易定义css class了,根据不同的类型定义相应的样式(当然太多的话,也不轻松),举个简单的例子:

将:

 return '<a class="search-item" href="http://www.sencha.com/forum/showthread.PHP?t={topicId}&p={id}">' +
                        '<h3><span>{[Ext.Date.format(values.lastPost,Y")]}<br />by {author}</span>{title}</h3>' +
                        '{excerpt}' +
                    '</a>';
简单更改为 return '<div class="{style}">{mc}</div>' 其中style是fileds里根据后台的类型参数对应的mapping字段里的内容。 mc也是 这里分别指:类型、名称。

样式里设置相应的背景图片即可。

效果:


仔细阅读api的话,有更好的方法改造它,以上仅仅是简单的更改,设计到复杂些的更改估计就得往boundlist里专研了~

仅供了解学习,因为水平太差,讲不好道不明,本文仅为了证明可以这么做,或许有更好的方法提供出来供网友学习。(应网友请求,将其发到csdn,欢迎指正)

对Extjs“Combo with Templates and Ajax”改进下拉数据中添加图标标识的更多相关文章

  1. HTML5 播放 RTSP 视频的实例代码

    目前大多数网络摄像头都是通过 RTSP 协议传输视频流的,但是 HTML 并不标准支持 RTSP 流。本文重点给大家介绍HTML5 播放 RTSP 视频的实例代码,需要的朋友参考下吧

  2. 浅析HTML5中的download属性使用

    这篇文章主要介绍了浅析HTML5中的download属性使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  3. HTML5 Blob 实现文件下载功能的示例代码

    这篇文章主要介绍了HTML5 Blob 实现文件下载功能的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. web字体加载方案优化小结

    这篇文章主要介绍了web字体加载方案优化小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  5. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  6. ios – 加载空白页面的SFSafariViewController

    我正在使用SFSafariViewController在我的iOS应用程序中打开一个URL..它在iOS9上完美运行但在将我的设备更新到iOS10后,它只是在地址栏中加载了一个没有URL的空白页面.甚至safariViewController(控制器:SFSafariViewController,didCompleteInitialLoaddidLoadSuccessfully:Bool)在控制器

  7. ios – 应用更新,NSURL和文档目录

    我应该存储相对图像网址或字符串来表示这些资源的位置,还是应该可以存储最终成为绝对网址的内容?

  8. ios – 从Facebook这样的任何URL获取特定图像

    我的问题看起来可能与其他问题类似,但事实并非如此.(据我所知).我无法理解如何从任何URL获取特定图像像Facebook一样,我无法向您显示屏幕截图,因为我没有真正的设备.但我可以告诉你Skype的屏幕截图来自MAC.任何帮助将不胜感激.thanks.编辑:我使用这个link获得了favicon,但它非常小我想要更大的尺寸.解决方法最后,我得到了答案.这可能对你有帮助,这就是为什么我发布这个答案.

  9. ios – 资产目录与文件夹参考:何时使用其中一个?

    我可以将文件放入Assets.xcassets,或者我可以将文件放入文件夹引用.我何时会选择一个而不是另一个?

  10. ios – 在Swift中使用URLComponents编码”

    附:我知道,如果我自己构造一个查询字符串,然后简单地将结果传递给NSURL的构造函数init?

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部