Hi Isomorphic,
Short question: Is DynamicForm / ValuesManager saveData() expected to run if valuesHaveChanged() returns false?
I assume this is the case and if I want not to hit the server in that case I'm responsible for this myself using if (valuesHaveChanged())... Could you confirm this?
I did prepare a testcase for this before figuring out this might be by design, so I'll include it here just in case.
Best regards
Blama
Short question: Is DynamicForm / ValuesManager saveData() expected to run if valuesHaveChanged() returns false?
I assume this is the case and if I want not to hit the server in that case I'm responsible for this myself using if (valuesHaveChanged())... Could you confirm this?
I did prepare a testcase for this before figuring out this might be by design, so I'll include it here just in case.
Code:
package com.smartgwt.sample.client; import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.Version; import com.smartgwt.client.core.KeyIdentifier; import com.smartgwt.client.data.AdvancedCriteria; import com.smartgwt.client.data.Criterion; import com.smartgwt.client.data.DSCallback; import com.smartgwt.client.data.DSRequest; import com.smartgwt.client.data.DSResponse; import com.smartgwt.client.data.DataSource; import com.smartgwt.client.types.OperatorId; import com.smartgwt.client.util.Page; import com.smartgwt.client.util.PageKeyHandler; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.Window; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; import com.smartgwt.client.widgets.form.DynamicForm; import com.smartgwt.client.widgets.form.ValuesManager; import com.smartgwt.client.widgets.form.fields.FormItem; import com.smartgwt.client.widgets.layout.HLayout; import com.smartgwt.client.widgets.layout.VLayout; public class BuiltInDS extends VLayout implements EntryPoint { private IButton recreateBtn; public void onModuleLoad() { KeyIdentifier debugKey = new KeyIdentifier(); debugKey.setCtrlKey(true); debugKey.setKeyName("D"); Page.registerKey(debugKey, new PageKeyHandler() { public void execute(String keyName) { SC.showConsole(); } }); setWidth100(); setHeight100(); recreateBtn = new IButton("Recreate"); recreateBtn.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { new MyWindow().show(); } }); addMember(recreateBtn); new MyWindow().show(); draw(); } private class MyWindow extends Window { public MyWindow() { setWidth("95%"); setHeight("95%"); setMembersMargin(0); setModalMaskOpacity(70); setTitle(" (" + Version.getVersion() + "/" + Version.getSCVersionNumber() + ")"); setTitle("ValuesManager and DynamicForm saveData() behave differently" + getTitle()); setShowMinimizeButton(false); setIsModal(true); setShowModalMask(true); centerInPage(); DataSource animalsDS = DataSource.get("animals"); VLayout mainVLayout = new VLayout(40); { final DynamicForm animalsDF1 = new AnimalDF(animalsDS); animalsDF1.setGroupTitle("DynamicForm 1"); final DynamicForm animalsDF2 = new AnimalDF(animalsDS); animalsDF2.setGroupTitle("DynamicForm 2"); final ValuesManager animalsVM = new ValuesManager(); animalsVM.setDataSource(animalsDS); animalsDF1.setValuesManager(animalsVM); animalsDF2.setValuesManager(animalsVM); IButton checkButtonDF1 = new IButton("Check DynamicForm 1", new ClickHandler() { @Override public void onClick(ClickEvent event) { SC.say(animalsDF1.valuesHaveChanged().toString()); } }); checkButtonDF1.setWidth(200); IButton checkButtonDF2 = new IButton("Check DynamicForm 2", new ClickHandler() { @Override public void onClick(ClickEvent event) { SC.say(animalsDF2.valuesHaveChanged().toString()); } }); checkButtonDF2.setWidth(200); IButton checkButtonVM = new IButton("Check ValuesManager", new ClickHandler() { @Override public void onClick(ClickEvent event) { SC.say(animalsVM.valuesHaveChanged().toString()); } }); checkButtonVM.setWidth(200); IButton saveButtonVM = new IButton("Save ValuesManager", new ClickHandler() { @Override public void onClick(ClickEvent event) { animalsVM.saveData(new DSCallback() { @Override public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) { SC.say("In Callback"); } }); } }); saveButtonVM.setWidth(200); VLayout vmButtonsLayout = new VLayout(5); vmButtonsLayout.addMembers(checkButtonDF1, checkButtonDF2, checkButtonVM, saveButtonVM); HLayout vmLayout = new HLayout(5); vmLayout.setHeight(400); vmLayout.addMembers(animalsDF1, animalsDF2, vmButtonsLayout); animalsVM.fetchData(new AdvancedCriteria(new Criterion("scientificName", OperatorId.EQUALS, "Allligator mississippiensis"))); mainVLayout.addMember(vmLayout); } { final DynamicForm animalsDF3 = new AnimalDF(animalsDS); animalsDF3.setGroupTitle("Single DynamicForm"); IButton checkButtonDF3 = new IButton("Check single DynamicForm", new ClickHandler() { @Override public void onClick(ClickEvent event) { SC.say(animalsDF3.valuesHaveChanged().toString()); } }); checkButtonDF3.setWidth(200); IButton saveButtonDF3 = new IButton("Save single DynamicForm", new ClickHandler() { @Override public void onClick(ClickEvent event) { animalsDF3.saveData(new DSCallback() { @Override public void execute(DSResponse dsResponse, Object data, DSRequest dsRequest) { SC.say("In Callback"); } }); } }); saveButtonDF3.setWidth(200); HLayout dfLayout = new HLayout(5); dfLayout.setHeight(400); dfLayout.addMembers(animalsDF3, checkButtonDF3, saveButtonDF3); animalsDF3.fetchData(new AdvancedCriteria(new Criterion("scientificName", OperatorId.EQUALS, "Allligator mississippiensis"))); mainVLayout.addMember(dfLayout); } addItem(mainVLayout); } } private class AnimalDF extends DynamicForm { public AnimalDF(DataSource ds) { super(); setDataSource(ds); setAutoFetchData(false); setIsGroup(true); FormItem scientificName = new FormItem("scientificName"); FormItem commonNameLGF = new FormItem("commonName"); FormItem lifeSpanLGF = new FormItem("lifeSpan"); FormItem statusLGF = new FormItem("status"); setFields(scientificName, commonNameLGF, lifeSpanLGF, statusLGF); } } }
Blama
Comment