2012-06-18 77 views
2

我一直無法使動態樹形網格顯示,因爲它應該 - 網格後面的數據正在工作,我可以看到打印到FireBug控制檯的結果。然而,ExtJS Tree Grid沒有顯示任何內容,除了在存儲中靜態設置的根節點之外沒有任何內容。ExtJS 4.0.7:樹形網格不顯示

的視圖:

Ext.define('TS.view.file.archives.raGrid', { 
    extend: 'Ext.tree.Panel', 
    alias: 'widget.ramaingridpanel', 

    id: 'raGrid', 
    autoScroll: true, 
    store: 'file.archives.Resources', 
    layout: { 
     type: 'hbox', 
     align: 'top', 
     pack: 'start' 
    }, 
    columns: [{ 
     xtype: 'treecolumn', 
     id: 'raGridResourceName', 
     flex: 2, 
     dataIndex: 'text', 
     width: 100, 
     hideable: false, 
     groupable: false, 
     text: 'Name', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'templatecolumn', 
     id: 'raGridResourceIcon', 
     tpl: new Ext.XTemplate('<div id="{iconCls}" class="{iconCls}" role="presentation">&nbsp;</div>').html, 
     flex: 0.1, 
     dataIndex: 'iconCls', 
     hideable: false, 
     groupable: false, 
     editor: { 
      xtype: 'combobox', 
      store: Ext.data.StoreManager.lookup('file.archive.ResourceIcons') 
     } 
    }, { 
     xtype: 'datecolumn', 
     id: 'raGridDate', 
     flex: 1, 
     dataIndex: 'updated', 
     hideable: false, 
     groupable: false, 
     text: 'Updated' 
    }, { 
     xtype: 'gridcolumn', 
     id: 'raGridPurchasingUnit', 
     flex: 1, 
     dataIndex: 'purchasedUnit', 
     groupable: false, 
     text: 'Unit', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'numbercolumn', 
     id: 'raGridCost', 
     flex: 1, 
     dataIndex: 'purchasedCost', 
     groupable: false, 
     text: 'Cost excl. VAT', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'numbercolumn', 
     id: 'raGridDiscount', 
     dataIndex: 'purchasedDiscount', 
     flex: 1, 
     groupable: false, 
     text: 'Discount %', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'gridcolumn', 
     id: 'raGridEstimatingUnit', 
     flex: 1, 
     dataIndex: 'estimateUnit', 
     groupable: false, 
     text: 'Unit', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'numbercolumn', 
     id: 'raGridAddOn', 
     flex: 1, 
     dataIndex: 'profitAddOn', 
     groupable: false, 
     text: 'Mark-up %', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'numbercolumn', 
     id: 'raGridLanded', 
     flex: 1, 
     dataIndex: 'landedCost', 
     groupable: false, 
     text: 'Landed cost', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'numbercolumn', 
     id: 'raGridCostPrice', 
     flex: 1, 
     dataIndex: 'number', 
     groupable: false, 
     text: 'Costprice', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'numbercolumn', 
     id: 'raGridUnitCorrelation', 
     flex: 1, 
     dataIndex: 'unitCorrelation', 
     groupable: false, 
     text: 'Prch./Est.', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'numbercolumn', 
     id: 'raLeadTime', 
     flex: 1, 
     dataIndex: 'leadTime', 
     groupable: false, 
     text: 'Leadtime', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'gridcolumn', 
     id: 'raGridClass', 
     flex: 1, 
     dataIndex: 'ResourceClassShortname', 
     groupable: false, 
     text: 'Class', 
     editor: { 
      xtype: 'textfield' 
     } 
    }, { 
     xtype: 'gridcolumn', 
     id: 'raGridSupplier', 
     flex: 1, 
     dataIndex: 'supplierName', 
     groupable: false, 
     text: 'Supplier', 
     editor: { 
      xtype: 'textfield' 
     } 
    }], 
    viewConfig: { 
     id: 'raGridView' 
    }, 
    plugins: [{ 
     ptype: 'rowediting', 
     autoCancel: false, 
     clicksToEdit: 2 
    }, { 
     ptype: 'gridviewdragdrop', 
     ddGroup: 'raDdGroup' 
    }] 
}); 

商店:

Ext.define('TS.store.file.archives.Resources', { 
    extend: 'Ext.data.TreeStore', 
    alias: 'store.file.archives.Resources', 

    model: 'TS.model.file.archives.Resources', 
    autoLoad: false, 
    proxy: { 
     type: 'ajax', 
     url: 'index.php/ajax/resources/', 
     reader: { 
      type: 'json', 
      root: 'results', 
      successProperty: 'success', 
      totalProperty: 'total' 
     } 
    }, 
    root: { 
     text: 'Resources', 
     id: 'myResources', 
     expanded: true, 
     children: {} 
    } 
}); 

模型:

Ext.define('TS.model.file.archives.Resources', { 
extend : 'Ext.data.Model', 
alias : 'model.file.archives.Resources', 

fields : [ { 
    name : 'id', 
    type : 'int' 
}, { 
    name : 'parent_id', 
    type : 'int' 
}, { 
    name : 'child_id', 
    type : 'int' 
}, { 
    name : 'text', 
    type : 'string' 
}, { 
    name : 'updated', 
    type : 'date' 
}, { 
    name : 'purchasedUnit', 
    type : 'string' 
}, { 
    name : 'purchasedCost', 
    type : 'double' 
}, { 
    name : 'purchasedDiscount', 
    type : 'double' 
}, { 
    name : 'estimateUnit', 
    type : 'string' 
}, { 
    name : 'profitAddOn', 
    type : 'string' 
}, { 
    name : 'addonManager', 
    type : 'string' 
}, { 
    name : 'landedCost', 
    type : 'double' 
}, { 
    name : 'unitCorrelation', 
    type : 'double' 
}, { 
    name : 'leadTime', 
    type : 'string' 
}, { 
    name : 'ResourceClassShortname', 
    type : 'string' 
}, { 
    name : 'supplierName', 
    type : 'string' 
}, { 
    name : 'iconCls', 
    type : 'string' 
}, { 
    name : 'ClientSessionId', 
    type : 'string' 
} ] 
}); 

JSON數據:

({ 
    "success":"true", 
    "total":"1", 
    "results": 
    [{ 
     "id":0, 
     "parent_id":0, 
     "child_id":2, 
     "text":"Gravemaskiner", 
     "updated":1339079129, 
     "purchasedUnit":"", 
     "purchasedCost":0, 
     "purchasedDiscount":0, 
     "estimateUnit":"", 
     "profitAddOn":"", 
     "landedCost":0, 
     "unitCorrelation":0, 
     "leadTime":"", 
     "ResourceClassShortname":"", 
     "supplierName":"", 
     "iconCls":"iconFolder", 
     "leaf":false, 
     "children":... 

如果有人會這麼好心的點出了什麼錯我的代碼,將是巨大的,

G.

使用的ExtJS 4.0.7


更新:2012-06- 19

一直在測試了很多,這個錯誤似乎有什麼東西,用它做的,但我不知道這意味着什麼,如何解決這個問題:

records[i] is undefined /extjs/ext-all-dev.js Line 88068

已打印的對象來安慰他們清楚地顯示在存儲中的數據。


+0

我有一種感覺,我在我的控制器中丟失了一些東西。我已經找到了這個代碼'settingsTreeStore.getRootNode()。appendChild(userTreeStore.getRootNode())。expand();'在另一個網站上 - 我如何將它添加到我的當前控制器?一些代碼可能觸發gridview的'afterload'? – rnngau

+0

如果可以的話,你應該使用最新的代碼。 4.0.7很爛 –

+0

我從4.1.0中收到很多錯誤。顯然有事要做XTemplate等。 – rnngau

回答

0

煎茶支持回答如下:

The reason the tree is not loading correctly is because the json invalid for the tree to digest.

的問題是在JSON - 它是如何產生的:

// I used this: 
$result[$i] = $newArray; 

// To fix I had to use this to generate the JSON 
array_push($result,$newArray); 

和:

I did notice on your original json, that it was wrapped in "()" which is incorrect.

1

你的讀者需要定義,像這樣:

reader : { 
    type : 'json', 
    root : 'children', 
    successProperty : 'success', 
    totalProperty : 'total' 
} 

和你的JSON根應該改變從resultschildren

+0

更改了json根目錄和閱讀器定義,但尚未工作。 – rnngau