2017-02-21 114 views
0

我有这样一段代码:然而可能是什么原因,dgrid选择选择不适合我?

define([ 
... 
"MyGrid/lib/dgrid/Grid", 
"MyGrid/lib/dgrid/Keyboard", 
"MyGrid/lib/dgrid/Selection", 
"MyGrid/lib/dgrid/extensions/Pagination", 
"MyGrid/lib/dgrid/extensions/ColumnHider", 
"MyGrid/lib/dgrid/extensions/ColumnResizer", 
... 
], function (declare, ..., dgrid, dgridKeyboard, dgridSelection, 
      dgridPagination, dgridColumnHider, dgridColumnResizer, 
      Memory, widgetTemplate) { 
     ... 
     // creates the grid 
     _createGrid: function (columns, collection) { 
      this._grid = new CustomGrid({ 
       className: "dgrid-autoheight", 
       columns: columns, 
       collection: collection, 
       firstLastArrows: true, 
       loadingMessage: "Loading...", 
       noDataMessage: "No results.", 
       pagingLinks: 2, 
       pageSizeOptions: [10, 15, 25], 
       pagingTextBox: false, 
       selectionMode: "toggle", 
       allowSelectAll: true 
      }, this.gridNode); 
      this._grid.startup(); 
     }, 
     ... 
     // Attach events to HTML dom elements 
     _setupEvents: function() { 
      logger.debug(this.id + "._setupEvents"); 
      ... 

      this._selectEventListener = this._grid.on("dgrid-select", function (event) { 
       var rows, id; 

      console.log(event.grid.id + ": selected " + dojoArray.map(event.rows, function (row) { 
       return row.id; 
      }).join(", ")); 
      console.log("selection: " + JSON.stringify(event.grid.selection, null, " ")); 

      // Get the rows that were just selected 
      rows = event.rows; 

      console.log("selectionMode: " + event.grid.selectionMode); 

      console.log("Row entries: " + Object.entries(rows)); 
      console.log("Row[0] entries: " + Object.entries(rows[0].element)); 
      console.log("Selection: " + Object.entries(event.grid.selection)); 

       // Iterate through all currently-selected items 
       for (id in event.grid.selection) { 
        if (event.grid.selection[id]) { 
         console.log("keys: " + Object.entries(event.grid.selection[id])); 
        } 
       } 
      }); 
     }, 
     ... 
     // rerender the grid. 
     _renderGrid: function (objs) { 
      var objAttributes, gridColumns; 

      if (objs.length) { 
       objAttributes = objs[0].getAttributes(); 

       if (this._grid) { 
        this._selectEventListener.remove(); 
        this._errorEventListener.remove(); 
        this._grid.destroy(); 
        dojoConstruct.place(this.gridNode, this.domNode); 
       } 

       // Create header and content data. 
       gridColumns = this._createColumns(objAttributes); 
       this._gridStore = new Memory({ 
        data: this._createData(objs, objAttributes, gridColumns) 
       }); 
       this._createGrid(gridColumns, this._gridStore); 
       this._setupEvents(); 
      } 
     }, 

     // create grid HeaderData from retrieved objects. 
     _createColumns: function (objAttributes) { 
      var fieldname, columns, i; 
      columns = [ 
       {field: "id", label: "ID"} 
      ]; 

      if (objAttributes) { 
       for (i in objAttributes) { 
        fieldname = objAttributes[i].toLowerCase().replace(".", "-"); 
        columns.push({field: fieldname, label: objAttributes[i]}); 
       } 
      } 

      return columns; 
     }, 

选择是真的参差不齐。 它只适用于双击。下面是点击一个选择的结果:

dgrid_0: selected 
selection: { 
    "undefined": true 
} 
selectionMode: toggle 
Row entries: 0,[object Object] 
Row[0] entries: rowIndex,0 
Selection: undefined,true 
keys: 

正如你所看到的,它只能通过事件排回升的选择,而不是问grid.selection。 多个选择也没有拿起。

为什么不注册?

+0

我怀疑这里的原因之一可能是集合中没有'idProperty'。如果你想把集合对象的id映射到它,应该有'id'属性。如果你想将它映射到不同的属性,那么在创建集合时定义'idProperty:otherProperty'。 – Himanshu

+0

你是一个拯救生命的人。非常感谢你。把你的评论作为答案,我会接受它。这就是答案:this._gridStore = new Memory({ data:this._createData(objs,objAttributes,gridColumns), idProperty:“id”}); – rmsluimers

+0

完成!很高兴我能帮上忙。 :) – Himanshu

回答

0

我怀疑这里的原因之一可能不是idProperty收藏。如果您想要将集合对象的ID映射到它,应该有id属性。如果您想将其映射到不同的属性,则在创建集合时定义idProperty: otherProperty

相关问题