2012-03-13 47 views
0

我有一個fromPanel,我試着做如下:ExtJS的:添加複選框FormPanel中:錯誤狀態

var linkPanel = new Ext.FormPanel({ 
    ... 
}); 
var records = layers_store.getRange(); 
for(var i = 0; i < records.length; i++) { 
    var layer_checked; 
    console.log(records[i].data); 
    if(records[i].data.checked == 'true') { 
     layer_checked = true; 
    } else { 
     layer_checked = false; 
    } 
    console.log(layer_checked); 
    linkPanel.add(new Ext.form.Checkbox({ 
     boxLabel : records[i].data.layer_name, 
     name : records[i].data.layer_name, 
     checked : layer_checked, 
     handler : ... 
     } 
    })); 
} 

而且在我的代碼layers_store另一部分正在被改變。

因此,我在控制檯:

({layer_id:"1", layer_name:"\u041F\u0435\u0440\u0432\u044B\u0439", checked:"false"}) 
false 
({layer_id:"2", layer_name:"\u0412\u0442\u043E\u0440\u043E\u0439", checked:"true"}) 
true 

什麼意思是第一個複選框必須選中。 它仍然檢查。

我在做什麼錯了?

編輯enter image description here

+0

只有第一個被選中?其餘的很好?你使用複選框作爲單選按鈕,只有一個選擇或不選? – sha 2012-03-13 12:39:07

+0

@sha,但,問題是都是一樣的:我在這裏使用它只是作爲一個例子。複選框按原樣使用 - 不像收音機。 – k102 2012-03-13 12:40:55

+0

那麼它應該工作.. :)嘗試登錄面板本身添加了所有複選框後 - 你可以看到裏面的項目從調試。 – sha 2012-03-13 12:43:34

回答

1

這個答案真的取決於你使用的是什麼版本的ExtJS的。我會認爲這是4.0版本。

由於Ext.data.Store的getRange()方法返回記錄數組,Ext.data.Model類型的對象,因此您無法真正能夠像訪問簡單數組的索引一樣訪問它的屬性。

嘗試訪問它們是這樣的:

records[i].get('layer_id'); 
records[i].get('layer_name'); 
records[i].get('checked'); 
+0

我使用3.4版本,這一變化給了我什麼 – k102 2012-03-13 12:53:40

+0

在這種情況下,返回的數組類型分機的對象.data.Record,我說得對嗎?無論如何,我認爲這個問題存在於你實際試圖獲取checked屬性的代碼中。嘗試在控制檯中調試該值。 – 2012-03-13 12:56:50

+0

我已經這樣做了:看到我的問題。 'layer_checked' var包含我所需要的。也許我需要以某種方式刷新表單? – k102 2012-03-13 13:01:35