2010-08-09 19 views
0

這可能很明顯,但我無法弄清楚如何將靜態json對象綁定到extjs中的FormPanel。我是ExtJs的新手,所以我還在學習。我有一個TreePanel,其中包含node.attributes對象中包含的各種附加屬性。當一個節點被點擊時,就像在一個表單中顯示數據一樣。以下是我的。數據不會綁定到字段。Extjs將TreePanel靜態數據綁定到FormPanel

extjs的所有示例都涵蓋從商店或網址加載數據。

tree.on('click', function (n) { 

      var detailEl = details.body; 

      if (n.attributes.iconCls == 'page') { 

       detailEl.hide(); 
       var form = new Ext.FormPanel({ 
        frame: true, 
        renderTo: detailEl, 
        title: 'Page Details', 
        bodyStyle: 'padding:5px 5px 0', 
        width: 350, 
        defaults: { width: 230 }, 
        defaultType: 'textfield', 
        data: n.attributes, 
        items: [{ 
         fieldLabel: 'Title', 
         name: 'title', 
         allowBlank: false 
        }, { 
         fieldLabel: 'Url', 
         name: 'url', 
         allowBlank: false 
        }, { 
         fieldLabel: 'Live', 
         name: 'islive', 
         xtype: 'checkbox' 
        } 
       ], 
        buttons: [{ 
         text: 'Save' 
        }] 
       }); 


       detailEl.slideIn('l', { stopFx: true, duration: .2 }); 
      } 

     }); 

最好是每次創建一個新的FormPanel或重新綁定現有的FormPanel?

感謝,

伊恩

回答

5

最佳做法是將表單渲染一次,並根據所選節點更改值。

如前所述,data不是使用領域。要以批量方式分配值,您應該使用Ext.form.BasicForm.setValues(Array/Object values)方法。您使用FormPanel的getForm()方法得到BasicForm對象。

彙總,

var form = new Ext.FormPanel({/*...*/}); 
tree.on('click', function (node){ 
    form.getForm().setValues(node.attributes); 
}); 

注意的是,該表單字段的名稱和屬性的名稱應一致。

+0

謝謝。查看BasicForm和FormPanel文檔,看看幾小時後,我怎麼會錯過setValues方法! – madcapnmckay 2010-08-10 08:33:43

1

我不相信data配置重點做什麼,你認爲它。

在字段定義中單獨嘗試設置值。