PDA

View Full Version : Stores, Callbacks and Sync



wizkid
9 Mar 2011, 3:18 PM
Consider this model:



Ext.regModel('EditableUserList',
{
fields: [
{ name: 'LoginUserId', type: 'string' },
{ name: 'FirstName', type: 'string' },
{ name: 'LastName', type: 'string' },
{ name: 'IsNew', type: 'boolean' },
{ name: 'IsDirty', type: 'boolean' },
{ name: 'IsDeleted', type: 'boolean' }],
proxy:
{
type: 'rest',
url: '/Home/EditableUserListDataPortal/',
reader:
{
type: 'json',
successProperty: 'success'
}
}
});


For right now I am using 'rest'

Now consider this code for me store:



var storeUsers = new Ext.data.Store({ model: 'EditableUserList' })

function getEditList()
{
storeUsers.load(
{
scope: this,
callback: function (records, operation, success)
{
console.log("Got Editable List");

records[0].set('FirstName', 'Slouch');
records[0].set('LastName', 'Man');
}
});



Now consider my save logic:


function saveUserList()
{
storeUsers.sync({
scope: this,
callback: function (records, operation, success) {
console.log("Saved Editable List");
}
});
}


My problem is perhaps a confusion or maybe a bug. I am not sure.

So, when I call storeUsers.sync(...) it calls my Web Server's HTTP Post. The entire list goes to the server and I persist what changed, and send down the new list, from within my HTTP Post. Then what happens is odd. The store also calls HTTP Put (right now I don't have one) with just the changed data.

Why is the store calling both my HTTP Post and my HTTP Put? I can see the argument for only sending a list of what changed... But I don't get calling both because the Post is sending my entire list including the changes.

I don't want my server to have two calls. How do I disable either one? Or am I doing something wrong?

My second question is the Sync does not call my call-back... Is this a bug? How in the world could you use a Sync without it (if it's not a bug)? I need to know if the entire operation worked or not!

Thanks again!