2011-07-27 36 views
0

OK某種原因,這是一個很小的代碼片段(ExtJS的4):項目在CheckboxGroup是使用相同的管理

var TestA = function() {} 
    TestA.prototype.createCheckboxes = function() { 
    var items = [ 
     {boxLabel: "A", inputValue: "A", name: "smthng"}, 
     {boxLabel: "B", inputValue: "B", name: "smthng"} 
    ]; 

    var chgroup = new Ext.form.CheckboxGroup({items:items}) 
    return chgroup;  
    } 

    var a = new TestA().createCheckboxes().items.get(0).getManager(); 
    var b = new TestA().createCheckboxes().items.get(0).getManager(); 
    console.log(a, b, a == b) 

據我所看到的,我們正在創建分機的不同實例.form.CheckboxGroup。儘管如此,檢查顯示創建的項目正在使用相同的管理器。這是故意的嗎?我該如何擺脫這種行爲?因爲我想有「不同」複選框組不互相影響(loadRecords的一種形式影響另一個)

+0

什麼ExtJS的版本是您使用? –

+0

@Xupypr MV - ExtJs4 – shabunc

+0

Ext.form.CheckboxManager是一個私有工具類,用於管理按名稱分組的所有Ext.form.field.Checkbox字段。 (來自ExtJS 4.0.1文檔)。 –

回答

2

這是故意的。 CheckboxManager是一個單身人士,只不過是一個「你的DOM中的所有複選框的集合」與一些包裝功能

要實現你想要的(一組中的活動不應該影響其他人),你必須確保複選框名稱屬性在您的各種複選框組之間是不同的。

即,如果組A具有複選框「smthng」,則組B可以具有「其他」而不是「smthng」。

(這也是情理之中,從設計的角度來看,因爲如果他們有相同的名字,真的是有「smthng」之間沒有區別,A組和B組「smthng」)

+0

可悲的消息,實際上:(這是非常自然的情況 - 提供一些不同的窗口,其中一組輸入具有相同的名稱。期望extjs以某種方式處理窗體像是一個範圍是非常符合邏輯的。 – shabunc

1

試試這個:

var a = new TestA().createCheckboxes().items.get(0); 
    var b = new TestA().createCheckboxes().items.get(0); 
    console.log(a, b, a === b); 

    var c = new TestA().createCheckboxes().items.length; 
    var d = new TestA().createCheckboxes().items.length; 
    console.log(c, d); 

至於Ext.form.CheckboxManager是管理所有的私人實用工具類Ext.form.field.Checkbox字段按名稱分組。 (來自ExtJS 4.0.1 docs),我想你不會有任何問題。

+0

對不起,但我相信你只是沒有得到正確的答案。問題是 - 爲什麼這些單獨創建的實例,我應該沒有什麼可分享的,實際上是共享共同經理。這有點煩人,違反直覺,而且它使動態表單創造更難。 – shabunc