我正在使用视图堆栈...所以当视图更改时,就像我们从一个页面移动到另一个页面时,将调度hide事件。所以我在隐藏事件中保存最后一页的信息,然后再转到下一页。但是是,如果我改变什么仍然改变视图隐藏事件被调用nd调用转到后端...我只是想要只在视图中的总和改变时调用...像总和文本值...所以我有两个选项
在每个组件上使用事件监听器,如果sumthing更改,则使标志为true ... nd hide event check,如果flag为true则向后端发送调用。
容器级别的事件监听器。如果子组件通过冒泡容器发生变化,则知道是否调度了sum事件.nd使标志成为真。
我怀疑容器......
答案 0 :(得分:0)
在过去的几个项目中,我使用了类似于你的第一个选项的方法。在我的每个表单控件的change
事件中,我调用了一个小函数,该函数只在我的模型中将changesMade
标志设置为true
。当用户尝试离开我的表单时,我会检查changesMade
标志以查看是否需要保存信息。
答案 1 :(得分:0)
我建议使用能够比较它们的dataProvider。例如,如果您使用textinputs更改内容,基本上可以执行以下操作:
[Bindable]
private var myDataProvider:Object = new Object();
private function creationCompleteHandler():void {
myDataProvider.updated = false;
myDataProvider.defaultValue = 'default';
myDataProvider.defaultValueTwo = 'default';
}
等
然后,在您的mxml中,您可以使用以下内容:
<mx:TextInput id="myText" text="{myDataProvider.defaultValue}" change="myDataProvider.defaultValue=myText.text; myDataProvider.updated=true;" />
最后,在您的隐藏事件中,您可以执行以下操作:
private function hideEventHandler( event:Event ):void {
if( myDataProvider.updated ){
// Call your RemoteServices (or w/e) to update the information
}
}
这样,当有任何变化时,您可以更新dataProvider并每次都可以访问新信息。
希望这有帮助!
答案 2 :(得分:0)
数据模型是你的朋友!
如果你养成了从加载数据中创建强类型数据模型的习惯,那么这样的问题就会变得非常基础。
我总是有一个键绑定集来生成类似于此的代码片段...
private var _foo:String;
public function get foo():String
{
return _foo;
}
public function set foo(value:String):void
{
if(_foo == value)
return;
var oldVal:String = _foo;
_foo = value;
this.invalidateProperty("foo", oldVal, value);
}
如果您的数据使用了这样的getter / setter,那么在模型级别上验证更改将非常容易,从而完全切断视图。