When I upgraded my application from SmartGWT 1.3 to 2.0, I ran into a JS error with a ListGrid that has setAlwaysShowEditors(true). When I turn off AlwaysShowEditors flag the problem goes away. This is the JS error:
When I debug the JS source where the problem occurs: this.$69m[_3] where _3 is null;
The listgrid is defined as follows:
Any suggestions would be appreciated.
Regards,
Wade
Code:
_4 "Error:
''this.$69m' is null or not an object'
in http://localhost:8080/mapping-gui/mappingtool/sc/modules/ISC_Grids.js
at line 1202
ListGrid.$69l(_1=>0, _2=>0)
ListGrid.refreshCell(_1=>0, _2=>0, _3=>undef, _4=>undef)
ListGrid.$32s(_1=>0, _2=>0, _3=>undef)
ListGrid.showInlineEditor(_1=>0, _2=>0, _3=>true, _4=>true, _5=>undef)
ListGrid.$31u(_1=>0, _2=>0, _3=>undef)
ListGrid.startEditing(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
ListGrid.dataChanged(_1=>undef, _2=>undef, _3=>undef, _4=>undef)
dataChangedObservation(operationType=>undef, originalRecord=>undef, rowNum=>undef, updateData=>undef)
ResultSet.$ee()
ResultSet.$390(_1=>Array[19], _2=>Obj)
ResultSet.fetchRemoteDataReply(_1=>Obj, _2=>Array[19], _3=>Obj)
Class.fireCallback(_1=>Obj, _2=>\"dsResponse,data,dsRequest\", _3=>Array[3], _4=>[ResultSet ID:isc_ResultSet_89 (created by: isc_OID_35)], _5=>undef) on [Class Class]
Class.fireCallback(_1=>Obj, _2=>\"dsResponse,data,dsRequest\", _3=>Array[3], _4=>undef)
DataSource.$38b(_1=>Array[19], _2=>Obj, _3=>Obj, _4=>undef, _5=>undef)
DataSource.processResponse(_1=>\"isc_OID_2$6275\", _2=>Obj)
" String
Code:
var _7=_3.$316;for(var i=0;i<_4.length;i++){var _8=_4[i],_9=_8.isDrawn(),_10=_7?_7.contains(_8):false,_11=isc.CanvasItem&&isc.isA.CanvasItem(_8);if(_9){if(_10){_8.redrawn();if(_2)_8.moved()}
else{_8.cleared()}}else if(_10){if(_11)_8.placeCanvas();_8.drawn()}}
delete _3.$316}
,isc.A.$69l=function(_1,_2){if(!this.$286||!this.$686((_2!=null?this.getField(_2):null),true))return;if(_1!=null){var _3="_"+_1+"_"+_2,_4=this.$69m[_3];if(_4){_4.formItem.clearInactiveEditorContext(_4);delete this.$69m[_3]}}else{var _5=this.getEditForm(),_6=_5.getItems();for(var i=0;i<_6.length;i++){_6[i].clearAllInactiveEditorContexts()}
delete this.$69m}}
,isc.A.setRecordValues=function(_1,_2){if(!this.shouldSaveLocally()){this.logWarn("setRecordValues() not supported for grids where saveLocally is false");return}
if(!this.data)return;var _3=this.data.indexOf(_1),_4=this.data.get(_3);isc.combineObjects(_4,_2);this.calculateRecordSummaries([_4]);if(this.useCellRecords){_3=this.findRowNum(_4);var _5=this.findColNum(_4);this.refreshCell(_3,_5)}else{this.refreshRow(_3)}
if(this.valuesManager!=null){this.valuesManager.$71e(_3,null,_4,this)}}
Code:
private ListGrid buildResultsGrid(DataSource resultsDS, final DynamicForm resultsForm) {
final ListGrid resultsGrid = new ListGrid();
resultsGrid.setAlwaysShowEditors(true);
resultsGrid.setHeight(200);
resultsGrid.setAlternateRecordStyles(true);
resultsGrid.setDataSource(resultsDS);
resultsGrid.setAutoFetchData(false);
ListGridField pickedField = new ListGridField("isPicked", "Pick");
pickedField.setType(ListGridFieldType.BOOLEAN);
pickedField.setCanEdit(true);
ListGridField resultCustomerIdField = new ListGridField("customerId", "Customer ID");
resultCustomerIdField.setHidden(true);
ListGridField resultsTitleField = new ListGridField("title", "Title");
ListGridField creationDateField = new ListGridField("creationDate", "Creation Date");
resultsTitleField.setWidth(400);
ListGridField resultsManufacturerField = new ListGridField("manufacturer", "Manufacturer");
resultsManufacturerField.setWidth(100);
ListGridField resultsMfrPartNumberField = new ListGridField("mfrPn", "MfrPn");
resultsManufacturerField.setWidth(100);
ListGridField categoryField = new ListGridField("category", "Category");
categoryField.setWidth(80);
ListGridField marketsField = new ListGridField("markets", "Markets");
marketsField.setWidth(100);
ListGridField upcField = new ListGridField("upc", "UPC");
ListGridField productIdField = new ListGridField("productId", "Product ID");
productIdField.setHidden(true);
ListGridField resultsOutcomeField = new ListGridField("outcome", "Outcome");
resultsOutcomeField.setWidth(100);
ListGridField scoreField = new ListGridField("score", "Score");
resultsGrid.setFields(pickedField, resultCustomerIdField, resultsTitleField, resultsManufacturerField, resultsMfrPartNumberField, categoryField,
upcField, productIdField, marketsField, scoreField, resultsOutcomeField, creationDateField);
resultsGrid.addRecordClickHandler(new RecordClickHandler() {
public void onRecordClick(RecordClickEvent event) {
populateResultsForm(resultsForm, resultsGrid, event);
}
private void populateResultsForm(final DynamicForm resultsForm, final ListGrid resultsGrid, RecordClickEvent event) {
int rowNum = event.getRecordNum();
resultsForm.setValue("title", resultsGrid.getRecord(rowNum).getAttribute("title"));
resultsForm.setValue("creationDate", resultsGrid.getRecord(rowNum).getAttribute("creationDate"));
resultsForm.setValue("manufacturer", resultsGrid.getRecord(rowNum).getAttribute("manufacturer"));
resultsForm.setValue("mfrPn", resultsGrid.getRecord(rowNum).getAttribute("mfrPn"));
resultsForm.setValue("category", resultsGrid.getRecord(rowNum).getAttribute("category"));
resultsForm.setValue("markets", resultsGrid.getRecord(rowNum).getAttribute("markets"));
resultsForm.setValue("productId", resultsGrid.getRecord(rowNum).getAttribute("productId"));
resultsForm.setValue("outcome", resultsGrid.getRecord(rowNum).getAttribute("outcome"));
resultsForm.setValue("score", resultsGrid.getRecord(rowNum).getAttribute("score"));
resultsForm.setValue("cdsId", resultsGrid.getRecord(rowNum).getAttribute("cdsId"));
resultsForm.setValue("upc", resultsGrid.getRecord(rowNum).getAttribute("upc"));
}
});
pickedField.addChangedHandler(new com.smartgwt.client.widgets.grid.events.ChangedHandler() {
@Override
public void onChanged(com.smartgwt.client.widgets.grid.events.ChangedEvent event) {
int rowNum = event.getRowNum();
unsetPicked(resultsGrid, rowNum);
Record record = resultsGrid.getRecord(rowNum);
record.setAttribute("isPicked", event.getValue());
resultsGrid.updateData(record);
}
private void unsetPicked(ListGrid resultsGrid, int rowNum) {
int totalRows = resultsGrid.getTotalRows();
for (int i = 0; i < totalRows; i++) {
if (i != rowNum)
resultsGrid.setEditValue(i, 0, false);
}
}
});
return resultsGrid;
}
Regards,
Wade
Comment