2015-09-23 8 views
1

Я создал додзе OnDemandGrid, у которого есть несколько столбцов с редакторами (NumberTextBox и FilteringSelect), поэтому я могу изменять значения в сетке. Я также добавил некоторые проверки в этих столбцах, чтобы убедиться, что введенные значения верны. Кажется, что все работает нормально, и когда я ввожу недопустимое значение, я получаю указание, что это значение неверно.Как проверить поле редактора в dojo OnDemainGrid

Моя проблема в том, когда я пытаюсь отправить эти данные на сервер. Когда я получаю данные сетки с ui.searchResultGrid.collection.data, любое из недопустимых полей не было обновлено в коллекции и все еще имеет свои исходные значения. Я предполагаю, что когда ячейка обновляется и сохраняет ее, она выполняет свою проверку, и если эта проверка не выполняется, она не обновляет коллекцию. Как я могу сказать, что некоторые ячейки не прошли проверку и имеют проблемы?

Вот как я определяю свою сетку, если это поможет:

require(["dojo/_base/declare", "dgrid/OnDemandGrid", "dgrid/Keyboard", "dgrid/Selection", "dgrid/Editor", 
     "dgrid/extensions/ColumnResizer", "dgrid/extensions/DijitRegistry", "dijit/form/NumberTextBox", 
     "dijit/form/FilteringSelect", "dojo/_base/lang", "dojo/domReady!"], 
    function (declare, OnDemandGrid, Keyboard, Selection, Editor, ColumnResizer, DijitRegistry, NumberTextBox, FilteringSelect, lang) { 

     var CustomGrid = declare([OnDemandGrid, Keyboard, Selection, Editor, ColumnResizer, DijitRegistry]); 
     ui.searchResultGrid = new CustomGrid({ 
      columns: { 
       newItemAmount: { 
        label: "# of New Item", 
        editor: NumberTextBox, 
        editorArgs: { 
         constraints: { 
          min: 0.0001, 
          max: 999.9999, 
          allowNegative: false, 
          places: 4 
         }, 
         style: "width:90px;", 
         required: true 
        }, 
        autoSave: true, 
        resizable: false, 
        sortable: false, 
        width: 100 
       }, 
       newItemUnitId: { 
        label: "Unit of New Item", 
        editor: FilteringSelect, 
        editorArgs: { 
         style: "width:130px", 
         searchAttr: "name", 
         labelAttr: "name", 
         required: true 
        }, 
        autoSave: true, 
        resizable: false, 
        sortable: false, 
        width: 140 
       } 
      }, 
      selectionMode: "none", 
      cellNavigation: false, 
     }, "searchResultGrid"); 
    }); 

ответ

0

Из того, что я был в состоянии найти, вы должны смотреть на каждую ячейку вы хотите проверить и проверить .element.widget.isValid(), чтобы проверить, прошел ли этот виджет проверки. Я написал функцию для проверки сетки с параметрами: сетки - сетка для проверки COLS - массив строк имен столбцов для проверки

function gridValid(grid, cols) { 
    for (var i = 0; i < grid.collection.data.length; i++) { 
    var rowId = grid.collection.getIdentity(grid.collection.data[i]) 
    for (var c = 0; c < cols.length; c++) { 
     if (!grid.cell(rowId, cols[c]).element.widget.isValid()) { 
     return false; 
     } 
    }; 
    } 
    return true; 
} 

и я назвал функцию так:

if (gridValid(ui.searchResultGrid, ["newItemAmount", "newItemUnitId"])) { 
    var toSave = ui.searchResultGrid.collection.data; 
    //TODO: save the grid data 
} 

Это может быть не лучший способ проверить сетку, но, похоже, она работает.

+0

Это не работает, если имеется достаточно строк, чтобы некоторые из них не отображались во время проверки, так как это «OnDemandGrid». 'grid.cell (rowId, cols [c]). Элемент' будет не определен для строк без рендеринга. – mbomb007