2012-11-18 112 views
9

我們公司從dojox/DataGrid移到dgrid的某段時間。現在我們發現,dgrid似乎不支持開箱即用的dijit/dojox小工具。dojo dgrid內部的小工具

dojox/DataGrid有一個formatter()可以返回一個小部件。在那裏很容易做到!該API comparison on GitHub

「dgrid支持格式的功能,但不支持返回 部件從他們也.dgrid具有renderCell,預計到 回報DOM節點,這可能表面上用於顯示 小部件(和編輯器列插件完全一樣)。請注意, 用於編輯單元格的目的,編輯器列插件的使用非常受歡迎。

究竟如何?

我試過使用編輯器插件{editor: ' ', editorArgs:' '}。這確實呈現一個小部件,但是太嚴格了。例如,我如何渲染一個dijit/Button,其標籤是單元格的值?或者更復雜的是,如何使用(不太知道的)dojox/image/MagnifierLite<img>從格式化程序函數中生成src是商店的值?

回答

14

您可以使用此示例代碼

require(
    [ 
     "dgrid/List", 
     "dgrid/OnDemandGrid", 
     "dgrid/Selection", 
     "dgrid/editor", 
     "dgrid/Keyboard", 
     "dgrid/tree", 
     "dojo/_base/declare", 
     "dojo/store/JsonRest", 
     "dojo/store/Observable", 
     "dojo/store/Cache", 
     "dojo/store/Memory", 
     "dijit/form/Button", 
     "dojo/domReady!" 
    ], 

    function(
     List, 
     Grid, 
     Selection, 
     editor, 
     Keyboard, 
     tree, 
     declare, 
     JsonRest, 
     Observable, 
     Cache, 
     Memory, 
     Button 
    ) { 

     var columns = [ 
      { 
       label:"Actions", 
       field:"id", 
       width: "200px", 
       renderCell: actionRenderCell 
      } 
     ]; 

     var actionRenderCell = function (object, data, cell) { 

      var btnDelete = new Button({ 
       rowId : object.id, 
       label: "Delete", 
       onClick: function() { 
        myStore.remove(this.rowId); 
       } 
      }, cell.appendChild(document.createElement("div"))); 

      btnDelete._destroyOnRemove = true; 

      return btnDelete; 

     } 

     grid = new (declare([Grid, Selection, Keyboard]))({ 
      store: myStore, 
      getBeforePut: false, 
      columns: columns 
     }, "grid"); 

} 
+0

是的!這樣可行!謝謝!在你的例子中,你正在dojox/DataGrid中有效地使用格式化renderCell。 dgrid的文檔指出,如果應用了格式化程序和renderCell,則格式化程序將被忽略。 任何想法,爲什麼它是這樣設計的? –

+3

這段代碼確實有效,但我確信它有內存泄漏。 [爲了避免使用removeRow](https://github.com/SitePen/dgrid/blob/v0.3.15/doc/usage/Working-with-Widgets.md#destroying-rendered-widgets) – sixtyfootersdude