EXT2 0 checkbox樹的擴充套件

2021-08-29 16:38:27 字數 3106 閱讀 2121

ext2.0 checkbox樹的擴充套件(支援單選,級聯多選,只選葉子等)

在ext1.x裡,樹是沒有checkbox的, 幸好在2.x版本裡提供了這個功能, 在許多應用裡, 帶有checkbox的樹使用還是很常見的

ext2.x提供了簡單的checkbox實現,但對於一些複雜的需求,如: 級聯多選(選中父結點,自選中其所有子結點和所有父結點) , 單選等等, ext2.x並沒有幫我們實現

還有最難解決的情況, 當樹是非同步的時候, 要想級聯多選, 實現起來有些難度

在此, 通過對ext.tree.treenodeui進行擴充套件,這些問題都得到很好的解決

js**

/**

* @class ext.tree.treechecknodeui

* @extends ext.tree.treenodeui

* * 對 ext.tree.treenodeui 進行checkbox功能的擴充套件,後台返回的結點資訊不用非要包含checked屬性

* * 擴充套件的功能點有:

* 一、支援只對樹的葉子進行選擇

* 只有當返回的樹結點屬性leaf = true 時,結點才有checkbox可選

* 使用時,只需在宣告樹時,加上屬性 onlyleafcheckable: true 既可,預設是false

* * 二、支援對樹的單選

* 只允許選擇乙個結點

* 使用時,只需在宣告樹時,加上屬性 checkmodel: "single" 既可

* * 二、支援對樹的級聯多選

* 當選擇結點時,自動選擇該結點下的所有子結點,以及該結點的所有父結點(根結點除外),特別是支援非同步,當子結點還沒顯示時,會從後台取得子結點,然後將其選中/取消選中

* 使用時,只需在宣告樹時,加上屬性 checkmodel: "cascade" 既可

* * 三、新增"check"事件

* 該事件會在樹結點的checkbox發生改變時觸發

* 使用時,只需給樹註冊事件,如:

* tree.on("check",function(node,checked));

* * 預設情況下,checkmodel為'multiple',也就是多選,onlyleafcheckable為false,所有結點都可選

* * 使用方法:在loader裡加上 baseattrs: 既可.

* 例如:

* var tree = new ext.tree.treepanel( //新增 uiprovider 屬性

* }),

* root: new ext.tree.asynctreenode()

* });

* tree.on("check",function(node,checked)); //註冊"check"事件

* tree.render();

* */

ext.tree.treechecknodeui = function() ;

ext.extend(ext.tree.treechecknodeui, ext.tree.treenodeui, else

this.elnode = this.wrap.childnodes[0];

this.ctnode = this.wrap.childnodes[1];

var cs = this.elnode.childnodes;

this.indentnode = cs[0];

this.ecnode = cs[1];

this.iconnode = cs[2];

var index = 3;

if(cb)

this.anchor = cs[index];

this.textnode = cs[index].firstchild;

}, // private

check : function(checked) else

n.attributes.checked = checked;

tree.fireevent('check', n, checked);

if(!this.onlyleafcheckable && this.checkmodel == 'cascade')

if( !n.expanded && !n.childrenrendered )

else

}else if(this.checkmodel == 'single')else

this.elnode = this.wrap.childnodes[0];

this.ctnode = this.wrap.childnodes[1];

var cs = this.elnode.childnodes;

this.indentnode = cs[0];

this.ecnode = cs[1];

this.iconnode = cs[2];

var index = 3;

if(cb)

this.anchor = cs[index];

this.textnode = cs[index].firstchild;

},// private

check : function(checked) else

n.attributes.checked = checked;

tree.fireevent('check', n, checked);

if(!this.onlyleafcheckable && this.checkmodel == 'cascade')

if( !n.expanded && !n.childrenrendered )

else

}else if(this.checkmodel == 'single')

}return false;

},togglecheck : function(value)

}});

使用方法都在注釋裡了,應該已經很詳細了,我就不多說了

需要注意的是, 使用例子裡的tree 使用了ext.tree.dwrtreeloader這個擴充套件類,用來載入後台樹結點,這和使用其它的loader沒有區別的,

如果您使用其它的loader, 同樣加上baseattrs: 就行了

對Ext中CheckBox的擴充套件

使用 ext中的 checkbox 時,經常需要隨 form 一起提交,但 checkbox 設定的預設的提交值為 on 或 後台 中需要對字段的提交進行判斷後取值,不符合我們通常的使用習慣,即直接將提交的值轉換為對應的 boolean 型別,為此,特進行擴充套件和封裝,以滿足通過的使用方式,如下 ...

建立帶有checkbox的樹

專案中偶爾會使用ext的一些元件,都是一些簡單的應用,每次寫不免有些浪費時間,自己封裝元件有沒那水準,索性把 記下來,下次出現相同應用場景的時候可以直接拿過來用。使用ext的展現方式 ext.blank image url epstar web swms client resources image...

Ext2 0中的事件

事件在設計模式中觀察者模式的實際執行,對於觀察者模式,我想說幾個特定概念,1 目標 subject,target 1 這是乙個大家都感興趣的物件,他知道他的觀察者,可以有任意多個觀察者觀察同乙個目標 2 提供註冊和刪除觀察者物件的介面 2 觀察者 observer 為那些在目標發生改變時需獲得通知的...