Ext.ux.form.SuperBoxSelect

在B/S系统中,下拉列表(select/dropdownlist/combobox)的应用随处可见,为了增强用户体验,开发人员也常常会做一些带联想功能的下拉列表,

特别是数据项比较多的时候,用户筛选起来就会很容易。

如果考虑多选的场景,我想以下的实现方式很多时候是能够满足要求的:

带复选框(checkbox)的下拉列表,应该是比较直观和方便了,也很符合用户的习惯.

但是如果数据项太多的时候。滚动条会很长,有两个不足:

1.用户查询自己想要的目标很困难;

2.用户如果需要选择的项很多(>10项),滚动条容易遮挡住,用户可能也不知道自己到底选了哪些。

于是带复选框且有联想功能的多选下拉列表闪亮登场了, Ext.ux.form.SuperBoxSelect

这款插件确实很好用,笔者也将其应用到了项目中

这里给出测试截图

用户选择之后可以看到自己所选,很直观吧!

插件下载地址:

Live example: http://technomedia.co.uk/SuperBoxSelect/examples3.html

Download: http://www.extjs.com/forum/attachmen...7&d=1263783379

Thread: http://extjs.com/forum/showthread.ph...654#post332654

怎么使用这个插件,我想示例中是很明了的,笔者也做了一个C#版的

ExtJs组件的基础引用都在母板中

ExtMaster.Master

 
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="ExtMaster.master.cs"
Inherits="Lucky.Views.Shared.ExtMaster" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<link href="../../Scripts/ext-3.4.0/resources/css/ext-all.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/ext-3.4.0/adapter/ext/ext-base-debug.js" type="text/javascript"></script>
<script src="../../Scripts/ext-3.4.0/adapter/ext/ext-base.js" type="text/javascript"></script>
<script src="../../Scripts/ext-3.4.0/ext-all.js" type="text/javascript"></script>
<script src="../../Scripts/Widget/CHelper.js" type="text/javascript"></script>
<asp:ContentPlaceHolder ID="TitleContent" runat="server">
</asp:ContentPlaceHolder>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ContentPlaceHolder ID="MainContent" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>

Vew视图:

 
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/ExtMaster.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> <link href="../../Scripts/SuperBoxSelect/superboxselect.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/SuperBoxSelect/states.js" type="text/javascript"></script>
<script src="../../Scripts/SuperBoxSelect/SuperBoxSelect.js" type="text/javascript"></script>
<script src="../../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<style type="text/css">
body {
font:13px/1.3 arial,helvetica,clean,sans-serif;
*font-size:small;
*font:x-small;
padding: 20px !important;
}
#page {
width: 700px;
}
p {
color: #333;
margin-bottom: 7px;
font-size: 14px;
}
form p {
margin-top: 7px;
}
code {
color: #000;
}
#intro p {
color: #000;
font-size: 15px;
margin-bottom: 20px;
}
h1 {
font-size: 1.6em;
line-height: 2.0em;
margin-bottom: 0.8em;
}
h2 {
font-size: 1.2em;
line-height: 1.6em;
margin-bottom: 0.6em;
}
.exForm{
padding: 20px 20px 20px 0px;
font-size: 12px;
}
.x-tag {
color: #693;
background-image: url(tag_green.gif);
background-repeat: no-repeat;
background-position: 2px center;
padding-left: 17px !important;
*text-indent: 17px !important;
}
.x-flag{
background-image: url(../../Scripts/ext-3.4.0/resources/images/default/s.gif);
background-repeat: no-repeat;
background-position: 2px center;
text-indent: 17px !important;
}
body.ext-ie6 .x-flag .x-superboxselect-item-close {
top: 4px;
right: 2px;
}
.small {
font-size: small;
} #f2Form .x-superboxselect-item-focus {
color: #fff;
} </style>
<script language="javascript" type="text/javascript">
var tempIdCounter = 0;
Ext.BLANK_IMAGE_URL = 'http://static.technomedia.co.uk/libs/ext-3.2.0/resources/images/default/s.gif';
Ext.onReady(function () { $("#btnToastWindow").click(function () {
GetWindow();
});
})
</script>
<script language="javascript" type="text/javascript">
/**
* ajax同步请求
*获取用例对象
*/
function GetSuperSelectData() {
var obj;
var value;
var strUrl = '../SuoperBoxSelect/GetSuperSocketStore';
if (window.ActiveXObject)
obj = new ActiveXObject('Microsoft.XMLHTTP');
else if (window.XMLHttpRequest)
obj = new XMLHttpRequest;
obj.open('POST', strUrl, false);
obj.setRequestHeader('Contnent-Type', 'application/', 'application/x-www-form-urlencoded');
obj.send(null);
var oResult = Ext.util.JSON.decode(obj.responseText);
return oResult;
} </script>
<script language="javascript" type="text/javascript">
/**
* form
*/
function GetForm() {
var SelectData = GetSuperSelectData();
//example 5
var states3 = new Ext.data.SimpleStore({
fields: ['abbr', 'state', 'nick', 'cls'],
data: SelectData,
sortInfo: { field: 'state', direction: 'ASC' }
});
var superSelect = new Ext.ux.form.SuperBoxSelect({
allowBlank: false,
msgTarget: 'title',
id: 'selector5',
xtype: 'superboxselect',
fieldLabel: 'States',
resizable: true,
hiddenName: 'statesHidden[]',
width: 300,
store: states3,
mode: 'local',
displayField: 'state',
displayFieldTpl: '{state} ({abbr})',
valueField: 'abbr',
navigateItemsWithTab: false,
value: ['AL', 'AZ']
});
var form = new Ext.form.FormPanel({
frame: true,
//title: '表单标题',
style: 'margin:10px',
items: [superSelect]
});
return form;
};
/**
* window
*/
function GetWindow() {
var form = GetForm();
var win = new Ext.Window({
title: '窗口',
width: 476,
height: 374,
items: [form],
resizable: true,
modal: true,
closable: true,
maximizable: true,
minimizable: true,
buttons: [{
text: '确定',
handler: function () {
var strValue = Ext.getCmp('selector5').getValue();
Ext.Msg.alert("提示", strValue);
win.close();
}
}, {
text: '取消',
handler: function () {
Ext.Msg.alert('提示', '取消');
win.close();
}
}]
});
win.show();
} </script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Example 5</h2>
<p>
This example demonstrates using <code>applyTo</code> to apply the component to an
existing dom element.</p>
<input type="button" id="btnToastWindow" value="弹出窗口" />
</asp:Content>

Controller:

这里只是构造一些测试数据,可以根据真是场景从数据库去数据和组织数据,

 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Lucky.Models;
namespace Lucky.Controllers
{
public class SuoperBoxSelectController : Controller
{
//
// GET: /SuoperBoxSelect/
public ActionResult Index()
{
return View();
}
#region 获取多选下拉列表数据源
/// <summary>
/// 获取多选下拉列表数据源
/// </summary>
/// <returns></returns>
public JsonResult GetSuperSocketStore()
{
var lstDoubleSuperSelectData = new List<List<string>>();
var lstSuperSelect = _GetSuperSocketStore();
foreach(var oSuperSelect in lstSuperSelect)
{
var lstSuperSelectData = new List<string>();
lstSuperSelectData.Add(oSuperSelect.abbr);
lstSuperSelectData.Add(oSuperSelect.state);
lstSuperSelectData.Add(oSuperSelect.nick);
lstSuperSelectData.Add(oSuperSelect.cls);
lstDoubleSuperSelectData.Add(lstSuperSelectData);
}
return Json(lstDoubleSuperSelectData,JsonRequestBehavior.AllowGet);
} private List<CSuperSelect> _GetSuperSocketStore()
{
var lstSuperSelect = new List<CSuperSelect>();
for (var iIndex = 0; iIndex < 10;iIndex++ )
{
var strAbbr = string.Format("{0}{1}","abbr",iIndex);
var strState = string.Format("{0}{1}","state",iIndex);
var strNick = string.Format("{0}{1}", "nick", iIndex);
var strCls = string.Format("{0}{1}", "cls", iIndex);
lstSuperSelect.Add(new CSuperSelect(strAbbr,strState,strNick,strCls));
}
return lstSuperSelect;
}
#endregion
}
}

Model:

 
public class CSuperSelect
{
public string abbr;
public string state;
public string nick;
public string cls;
public CSuperSelect(string abbr, string state, string nick, string cls)
{
this.abbr = abbr;
this.state = state;
this.nick = nick;
this.cls = cls;
}
}

参考:

http://www.sencha.com/forum/showthread.php?69307-3.x-Ext.ux.form.SuperBoxSelect

http://www.iteye.com/topic/392975

http://setting.iteye.com/blog/340900

转载请注明出处:http://www.cnblogs.com/lucky_hu/admin/EditPosts.aspx?opt=1

 
 
分类: C#ExtJsJquery学习笔记

Ext.ux.form.SuperBoxSelect的更多相关文章

  1. 一款不错的多选下拉列表利器—— Ext.ux.form.SuperBoxSelect

    在B/S系统中,下拉列表(select/dropdownlist/combobox)的应用随处可见,为了增强用户体验,开发人员也常常会做一些带联想功能的下拉列表, 特别是数据项比较多的时候,用户筛选起 ...

  2. ExtJs文件上传(Ext.ux.form.FileUploadField)

    Ext.ux.form.FileUploadField = Ext.extend(Ext.form.TextField, { /**  * @cfg {String} buttonText The b ...

  3. [转载]ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  4. ux.form.field.KindEditor 所见所得编辑器

    注意需要引入KindEditor相关资源 //所见所得编辑器 Ext.define('ux.form.field.KindEditor', { extend: 'Ext.form.field.Text ...

  5. ux.form.field.Verify 验证码控件

    //验证码控件 Ext.define('ux.form.field.Verify', { extend: 'Ext.container.Container', alias: ['widget.fiel ...

  6. ux.form.field.TreePicker 扩展,修复火狐不能展开bug

    /** * A Picker field that contains a tree panel on its popup, enabling selection of tree nodes. * 动态 ...

  7. ux.form.field.SearchField 列表、树形菜单查询扩展

    //支持bind绑定store //列表搜索扩展,支持本地查询 //支持树形菜单本地一级菜单查询 Ext.define('ux.form.field.SearchField', { extend: ' ...

  8. ExtJs4 笔记(12) Ext.toolbar.Toolbar 工具栏、Ext.toolbar.Paging 分页栏、Ext.ux.statusbar.StatusBar 状态栏

    本篇讲解三个工具栏控件.其中Ext.toolbar.Toolbar可以用来放置一些工具类操控按钮和菜单,Ext.toolbar.Paging专门用来控制数据集的分页展示,Ext.ux.statusba ...

  9. ux.form.field.Year 只能选年的时间扩展

    效果如图,亲测6.2.1版本可用,用法同时间选择控件 //只选择年的控件 Ext.define('ux.picker.Year', { extend: 'Ext.Component', alias: ...

随机推荐

  1. 使用C语言编写windows服务一般框架

    原文:使用C语言编写windows服务一般框架 编写windows服务和编写windows应用程序一样,有一些回调函数必须填写且向windows 服务管理器(service manager)进行注册, ...

  2. 多线程学习之五超时模式Timer

    timed[超时模式]案例:一个线程提供下载数据,另一个线程执行下载,如果有5秒钟以上,提供下载的线程没有提供数据,下载线程因超时异常,停止下载线程运行. 超时异常类 /** * */ package ...

  3. POJ 1947 树DP获得冠军

    特定N点,N-1的关系.建立了一棵树,问至少减去几个边缘节点可以被作为得到P树.树典型DP称号 dp[cur][j] :记录cur节点,为了得到一个j除去该子树的节点的边的最小数目 对当前树的每个子树 ...

  4. 安装Codeception框架

    安装Codeception框架 打开终端,进入项目根目录: composer require "codeception/codeception:*" 安装完成,在vendor目录会 ...

  5. C#-利用ZPL语言完毕条形码的生成和打印

     近期由于公司项目的须要,研究了一项对我来说算是新的技术-条形码的生成和打印.由于之前没有接触过这方面的知识,所以刚開始还有点小迷茫和小兴奋,只是一步一步来,问题总会解决的.如今来总结一下做条形码 ...

  6. DELL iDRAC 远程虚拟机报错:虚拟介质分离或所选虚拟磁盘驱动器的虚拟介质重定向已由另一用户使用

    原因很简单,那就是虚拟介质的映射功能,只能被使用一次. 推荐做法: 1.由于通过远程,在Lifecycle Controller里DeployOS安装系统,需要在虚拟介质里映射ISO,因此映射功能要留 ...

  7. bootstrap基本标签总结2

    [布局]bootstrap基本标签总结2   缩略图 <div class="container"> <div class="row"> ...

  8. AngularJS + CoffeeScript

    AngularJS + CoffeeScript 前端开发环境配置详解 AngularJS 号称 '第一框架' ('The first framework') 确实是名不虚传.由其从jQuery中完全 ...

  9. JS中apply与call的含义与区别

    JavaScript中,apply()与call()的含义一样,均为改变调用函数中的this指向.其中apply()与call()的第一个参数表示所要指向的对象,若调用函数无参数可不写,则默认为win ...

  10. SQL点滴22—性能优化没有那么神秘

    原文:SQL点滴22-性能优化没有那么神秘 经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQ ...