1. 程式人生 > >[Ext JS 4] 實戰之多選下拉單 (帶checkbox)

[Ext JS 4] 實戰之多選下拉單 (帶checkbox)

前言


Ext js 建立一個多選下拉單的方式很簡單, 使用Ext.form.ComboBox, 設定 multiSelect 為true 就可以了。

但是如果要在每個下拉之前加上一個checkbox, 如何實現呢?

ComboBox本身沒有這樣的配置,

有一個 “Ext.ux.form.MultiSelect” 這樣一個擴充套件, 效果的話,是把選項全部顯示出來。

沒辦法只能自己擴充套件一個這樣的元件了。

介面實現

要實現這樣的顯示,可以使用ComboBox 的listConfig 這個配置。

可以配置listConfig的itemTpl來顯示每個選項的顯示效果,

	    	  itemTpl : Ext.create('Ext.XTemplate',
	  	    	    '<input type=checkbox>{value}'),

功能聯動

顯示效果出來了並沒有介紹,

在選中某個選項時, 其前面的checkbox 應該是選中狀態;

反選某個,其前面的checkbox 應該是非選中狀態。

解決方式是在listConfig下配置 itemclick 的listeners

	  	      listeners:{
  	    		  itemclick:function(view, record, item, index, e, eOpts ){
  	    			  var isSelected = view.isSelected(item);
  	    			  var checkboxs = item.getElementsByTagName("input");
  	    			  if(checkboxs!=null)
  	    			  {
  	    				  var checkbox = checkboxs[0];
  	    				  if(!isSelected)
  	    				  {
  	    					  checkbox.checked = true;
  	    				  }else{
  	    					  checkbox.checked = false;
  	    				  }
  	    			  }
  	    		  }
	  	      }    

動態store

以上方式在本地store 的狀態下是可以的。

	var states2 = Ext.create('Ext.data.Store', {
	    fields: ['abbr', 'name'],
	    data : [
	        {"abbr":"AL", "name":"Alabama"},
	        {"abbr":"AK", "name":"Alaska"},
	        {"abbr":"AZ", "name":"Arizona"}
	        //...
	    ]
	});

但是通過ajax 方式取store 資料的狀況就會出現一個問題。
     proxy: {
         type: 'ajax',
         url: '/users.json',
         reader: {
             type: 'json',
             root: 'users'
         }
     },

選中之後, 下一次點選下拉單的話, 之前選中的check box 會被取消選擇。

原因是這種方式會更新 combobox 的下拉選項(combobox), 試圖通過在refresh , render 事件中加入處理, 發現不行。

最終追蹤程式碼,可以通過覆蓋onItemSelect的方法實現。
Ext.define('Ext.ux.MultiComboBox', {
    extend: 'Ext.form.ComboBox',
    alias: 'widget.multicombobox',
    xtype: 'multicombobox',
    initComponent: function(){
    	this.multiSelect = true;
    	this.listConfig = {
	    	  itemTpl : Ext.create('Ext.XTemplate',
	  	    	    '<input type=checkbox>{value}'),
	  	      onItemSelect: function(record) {    
	  	    	  var node = this.getNode(record);
    	          if (node) {
    	             Ext.fly(node).addCls(this.selectedItemCls);
    	             
    	             var checkboxs = node.getElementsByTagName("input");
    	             if(checkboxs!=null)
    	             {
    	            	 var checkbox = checkboxs[0];
  	    				 checkbox.checked = true;
    	             }
    	          }
	  	      },
	  	      listeners:{
  	    		  itemclick:function(view, record, item, index, e, eOpts ){
  	    			  var isSelected = view.isSelected(item);
  	    			  var checkboxs = item.getElementsByTagName("input");
  	    			  if(checkboxs!=null)
  	    			  {
  	    				  var checkbox = checkboxs[0];
  	    				  if(!isSelected)
  	    				  {
  	    					  checkbox.checked = true;
  	    				  }else{
  	    					  checkbox.checked = false;
  	    				  }
  	    			  }
  	    		  }
	  	      }    	  
	  	}   	
    	this.callParent();
    }
});


相關推薦

[Ext JS 4] 實戰 (checkbox)

前言 Ext js 建立一個多選下拉單的方式很簡單, 使用Ext.form.ComboBox, 設定 multiSelect 為true 就可以了。 但是如果要在每個下拉之前加上一個checkbox, 如何實現呢? ComboBox本身沒有這樣的配置, 有一個 “E

[Ext JS 4] 實戰Grid, Tree Gird編輯Cell

前言本篇這裡以稍微複雜一點的Tree Grid 來介紹.在寫編輯grid 之, 先來看一下 grid 的 selType 的配置。先給一個簡單的Tree grid 的例子:Ext.onReady(function(){ var treeStore = Ext.create(

[Ext JS 4] 實戰 week(星期)的日期選擇控制元件

前言Ext JS 3 和 Ext JS 4中都有提供日期選擇的元件(當然早期版本也有)。但是有一些日期選擇的需求是要看到星期,就是日期中的哪一天是這一年的第幾周。遺憾的是Ext js 並沒有提供這樣的配置。(針對Ext js 4來說,理想的相法是在Ext.picker.Dat

jq自定義列表框

多選 img 插件 國家 http 分享 class 下拉 blog 多選選擇國家插件 https://gitee.com/richard1015/dropDownList jq自定義多選下拉列表框

基於element-ui的框和tag標簽的二次封裝

line ron click opacity ext width 顯示 模塊 scss 前言: 今年這大半年我主要負責公司的後臺教務管理的開發,這個管理系統目前主要是給公司的內部人員去配置公司的核心項目(例如:熊貓小課)的所有數據,例如課程的配置、課程期數的配置、課程版本

jqgrid 表格中篩選條件的,樹形 ;文本框清除插件;高級查詢條件動態篩選插件

this break eset real 分割線 EDA color ctx 篩選條件 /** * @@desc 文本框清除按鈕,如果isAutoWrap為false當前文本框父級必須是relative定位,boostrap參考input-group

bootstrap-select動態級聯

1、引用css/js <link href="../../plugins/css/bootstrap.min.css" rel="stylesheet"> <link href="../../plugins/css/plugins/bootstrap-table/bootstr

PHP獲取列表,列表,框,複框內的值

PHP獲取單選下拉列表,多選下拉列表,單選框,複選框內的值,此例將當前頁作為提交資料的頁面。 <form action=" " method="post" accept-charset="utf-8"> <!--單選下拉 學歷--> <selec

select2功能

AngularJS完成select2多選下拉功能 1、引入js及css資源 2、頁面新增select標籤 1、引入js及css資源 <script src="../plugins/angularjs/angul

可搜尋列表外掛

可搜尋多選下拉列表外掛 參考:http://blog.csdn.net/xb12369/article/details/50999265 <html> <head> <title>jQuery bootstrap-sele

Bootstrap-select框實現

<!-- Latest compiled and minified CSS --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-select/1.10.0/css/bootst

獲取框(select標籤設定multiple屬性)的值

<select multiple>不能直接獲取value,需要藉助該元素的options屬性。如下: <select id="select" multiple> <option value="1">1111</option> &

EasyUI框的取值和賦值

 @RequestMapping("/getCodeList") public void getCodeList(HttpServletResponse resp){ ResUtil.res

控制元件multiselect使用小結

專案開發中,需要用到多選下拉列表外掛,由於專案前端框架採用了bootstrap,因此自然選擇了bootstrap的元件。經瞭解其有兩組外掛: 1、第一個元件是寫bootstrap table的主人公 wenzhixin 封裝的一個元件—— 筆者參考了“

Bootstrap select框賦值

Bootstrap Multi-Select Plugin的動態資料插入使用 圖片: 這個你看到的是我頁面的效果,我將裡面的js程式碼修改了一點,擴充套件了一下顯示的結果id,text,這是固定的,後面的是我又加了一個引數 參考頁面:多選框外掛連結(這個就是那個多選的

Extjs框multiSelect支援reset

多選,增加時會記憶上一次的選中的內容,表單reset對其無效,通過此修改可使表單reset時也會跟著清空。 以下程式碼是在multiSelect.js的基礎上進行簡單修改的。 if('function' !== typeof RegExp.escape) { RegExp.

bootstrap做前端需要實現

首先需要用到一個外掛bootstrap-select.min.js,新增以下引用:bootstrap-select.cssbootstrap-select.min.cssjquery-editable-select.css.cssbootstrap-select.jsboot

EasyUI 中框 combotree 學習研究

增加可以獲取的兩個選擇屬性: //alert($("#cc").combotree("getValue"));  //獲取key var wordstr=   $("#aa").combotree("getValues");  //獲取多選的key alert($("#cc").combotree("get

POI 選單(複框) 匯出Excel模板 單單選單

最近公司要做Excel的模板匯出,匯入資料的工作,匯出時還要動態生成模板,並且生成單選下拉選單,和多選下拉選單。開始搞這個很快除了多選的都搞定了,就是多選卡住了。弄了很久。。。最後終於在和多方面的交流下成功弄出。之前在網上找不到方法很是頭疼,現在弄出來分享一下給大家。。歡迎指

layui使用筆記

bug、新增內容、修改內容 擴充套件 增加屬性xm-select-dd-title 設定當滑鼠劃過時顯示提示框格式。預設不顯示,值為“tip”時使用layui自帶的tips顯示,其它按照title屬性顯示。詳見程式碼。 增加屬性xm