it works!

This commit is contained in:
Javier Abadia 2014-02-02 11:08:05 +01:00
parent 8c0e8f79b2
commit 93dac25947
2 changed files with 96 additions and 7 deletions

View File

@ -162,46 +162,132 @@ define([
layerEdits[ objectId ].graphic = edit.graphic;
break;
case editsStore.DELETE:
delete layerEdits[ objectId ];
if(objectId < 0)
delete layerEdits[ objectId ];
else
layerEdits[objectId].operation = editsStore.DELETE;
break;
}
}
}
console.log("optimized:",services);
return services;
},
replayStoredEdits_new: function(callback)
replayStoredEdits: function(callback)
{
if( editsStore.hasPendingEdits() )
{
/*
var onEditsComplete = layer["onEditsComplete"];
layer["onEditsComplete"] = function() { console.log("intercepting events onEditsComplete");}
var onBeforeApplyEdits = layer["onBeforeApplyEdits"];
layer["onBeforeApplyEdits"] = function() { console.log("intercepting events onBeforeApplyEdits");}
*/
var optimizedEdits = this.optimizeEditsQueue();
var promises = [];
optimizedEdits.forEach(function(service)
for(var service in optimizedEdits)
{
// send all edits to this service at once
},this);
// use esriRequest?
// OR
// send edits using _applyEdits() for each layer
for(var layerId in optimizedEdits[service])
{
console.log(service, layerId);
var layerUrl = service + '/' + layerId;
var layer = this._featureLayers[ layerUrl ];
var adds = [], updates = [], deletes = [];
for(var objectId in optimizedEdits[service][layerId])
{
var edit = optimizedEdits[service][layerId][objectId];
switch(edit.operation)
{
case editsStore.ADD:
console.log( layer.layerId, layer.graphics.map(function(g){return g.attributes[layer.objectIdField]},this));
for(var i=0; i<layer.graphics.length; i++)
{
var g = layer.graphics[i];
if( g.attributes[layer.objectIdField] == edit.graphic.attributes[layer.objectIdField] )
{
layer.remove(g);
break;
}
};
console.log( layer.layerId, layer.graphics.map(function(g){return g.attributes[layer.objectIdField]},this));
// layer.remove(edit.graphic);
delete edit.graphic.attributes[ layer.objectIdField ];
adds.push(edit.graphic);
break;
case editsStore.UPDATE:
updates.push(edit.graphic);
break;
case editsStore.DELETE:
deletes.push(edit.graphic)
break;
}
}
console.log( "sending edits", layerUrl,adds,updates,deletes);
var context = {
layer: layer,
adds: adds,
}
promises.push( layer._applyEdits(adds,updates,deletes, function(addResults,updateResults,deleteResults)
{
/*
for(var i=0; i<this.adds.length; i++)
{
this.adds[i].attributes[ this.layer.objectIdField ] = addResults[i].objectId;
}
console.log("edits applied!", addResults,updateResults,deleteResults);
*/
console.log( this.layer.layerId, this.layer.graphics.map(function(g){return g.attributes[this.layer.objectIdField]},this));
}.bind(context)) );
}
}
try{
console.log(promises);
var allPromises = new all(promises);
allPromises.then(
function(responses)
{
/*
layer["onEditsComplete"] = onEditsComplete;
layer["onBeforeApplyEdits"] = onBeforeApplyEdits;
self.emit('edits-sent');
this.emit('all-edits-sent',{});
*/
console.log("OOKK!!");
// self.emit('edits-sent');
// this.emit('all-edits-sent',{});
callback && callback();
},
function(errors)
{
console.log("ERROR!!");
console.log(errors);
callback && callback(errors);
})
}
catch(err)
{
console.log(err);
callback && callback(err);
}
}
else
{
this.emit('all-edits-sent',{});
callback && callback();
}
},
replayStoredEdits: function(callback)
replayStoredEdits_old: function(callback)
{
if( editsStore.hasPendingEdits() )
{

View File

@ -417,9 +417,11 @@ describe("Offline Editing", function()
expect(g_featureLayers[1].graphics.length).toBe(3);
expect(g_offlineFeaturesManager.getOnlineStatus()).toBe(g_offlineFeaturesManager.OFFLINE);
/*
l1.geometry.y += 300; // jabadia: change
l2.geometry.y += 100;
l3.geometry.y -= 200;
*/
var updates = [l1,l2,l3];
g_featureLayers[1].applyEdits(null,updates,null,function(addResults,updateResults,deleteResults)
{
@ -619,6 +621,7 @@ describe("Offline Editing", function()
g_offlineFeaturesManager.goOnline(function()
{
console.log("went online");
expect(g_offlineFeaturesManager.getOnlineStatus()).toBe(g_offlineFeaturesManager.ONLINE);
expect(g_editsStore.pendingEditsCount()).toBe(0);
// how to get the final id of g4 and g6 ?