/ / Dynamiczna zmiana koloru komórki w siatce Dojo w oparciu o zmianę wartości - dojo, grid

Dynamiczna zmiana koloru komórki w siatce Dojo w oparciu o zmianę wartości - dojo, grid

Mam siatkę dojo, która ma głównie 4 kolumny. Siatka jest początkowo pusta.

poniżej jest mój układ siatki

var gridLayout = [{
defaultCell: { width: "8%", editable: true, type: dojox.grid.cells._Widget, styles: "text-align: right;"  },
rows: [
{ name: "Item Id", field: "ItemId",hidden:true},
{ name: "Type", field: "LineType", width: "8%",  type: dojox.grid.cells.Select,styles: "text-align: center;"},
{ name: "Amount", field: "Amount", width: "8%", styles: "text-align: center;", type: dojox.grid.cells.TextBox},
{ name: "Code", field: "Code", width: "8%", styles: "text-align: center;",formatter:changeCodeColor, type: dojox.grid.cells.TextBox}
]
}];

Po kliknięciu przycisku Dodaj elementy zamówienia w formularzu ipobrać elementy z serwera z wartością w komórce Ilość jako puste, ale typ i kod są automatycznie wypełniane. Jeśli użytkownik zmienia wartość w komórce kodu, muszę zmienić kolor kodu. Poniżej znajduje się funkcja, którą napisałem

function changeCodeColor(code, rowIndex, cell)
{
var codeDetails = validateCode(code)
if(!codeDetails)
{
cell.customStyles.push("color:red");;
}
return code;
}

Funkcja validateCode sprawdza na serwerze czy kod jest poprawny czy nie. Jeśli kod jest nieprawidłowy lub nie jest dostępny, ustawienie koloru na czerwony.

Problem polega jednak na tym, że ten kod jest wykonywany za każdym razem, gdy jest wypełniana wartość (np. Ręczna zmiana, a także gdy system dodaje się automatycznie). Muszę wykonać sprawdzanie poprawności tylko wtedy, gdy użytkownik zmienia się ręcznie.

Każda pomoc byłaby przydatna

Odpowiedzi:

0 dla odpowiedzi № 1

Formatter służy do określania sposobu wyświetlania danych z twojego sklepu. W przypadku obsługi zdarzenia powinieneś użyć zdarzenia onCellClick z DataGrid w ten sposób,

var grid = new Grid({
store: store,
selectionMode: "single",
structure: [[
{ field: "name", name: "Name" }
]]}, dojo.byId("grid"));
grid.startup();

dojo.connect(grid, "onCellClick", function(e) {
var dataItem = grid.selection.getSelected();
console.dir(dataItem);
});