dgrid editor race condition

by Richard Ayotte

HTML

<script src="http://amd.egoworx.com/jsfiddle-dojo-require.js"></script>
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/dojo/1.10.1/dijit/themes/claro/claro.css">
<div id='grid'></div>

JavaScript

/**
 * @author Richard Ayotte
 */
require([
	'dgrid/editor'
    , 'dgrid/Keyboard'
    , 'dgrid/OnDemandGrid'
	, 'dijit/form/TextBox'
	, 'dojo/_base/declare'
	, 'dojo/aspect'
	, 'dojo/Deferred'
	, 'dojo/store/Observable'
	, 'dojo/store/Memory'
], function(
	editor
    , Keyboard
    , OnDemandGrid
	, TextBox
    , declare
    , aspect
    , Deferred
    , Observable
    , Memory
) {
    var store = new Observable(new Memory({
            data:[
                {"id":1,"given":"","name":""}
                , {"id":2,"given":"","name":""}
                , {"id":3,"given":"","name":""}
            ]
    }));

    var grid = new (declare([OnDemandGrid, Keyboard]))({
        store: store
        , columns: {
            name: editor({
                label: 'name'
                , autoSave: true
                , editor: TextBox
            })
            , given: editor({
                label: 'given'
                , autoSave: true
                , editor: TextBox
            })
        }
    }, 'grid');
    
    aspect.before(grid,'removeRow',function(){             
        console.debug('removeRow', arguments);
    });

    aspect.before(grid.store,'query',function(){             
        console.debug('query', arguments);
    });

    var oldQuery = grid.store.query;
	grid.store.query = function () {
		var queryResults = oldQuery.apply(this, arguments);
		var oldObserve = queryResults.observe;
		queryResults.observe = function (callback) {
			console.debug('observe called');
			return oldObserve.call(this, callback, false);
		};
		return queryResults;
	};
});