2011-04-14 101 views
-1

我正在使用视图堆栈...所以当视图发生变化时就像我们从一个页面移动到另一个页面一样隐藏事件被调度。因此,我在隐藏事件中保存最后一页的信息,然后进入下一页。但事情是,如果我改变什么仍然改变视图隐藏事件被调用nd调用去后端...我只想调用只有当sumthing改变view..like总和文本值...所以我有两个选项集装箱帮助

  1. 使用事件监听每个组件如果sumthing改变使标志真的......第二隐藏事件检查,如果标志为true发送调用到后端。

  2. 在容器级别的事件监听器..如果通过冒泡容器在子组件中发生变化,则知道是否调度了sum事件。并使该标志为true。

我怀疑与容器...

  • 我可以使用的容器,以及如何?
  • 我无法使用容器的原因?
  • 这两种方式有哪些优缺点?
+0

您能否提供一些代码或描述组件的结构以及您想要达到的目标? – Constantiner 2011-04-14 17:58:48

+0

确定这里是我的代码结构。我使用tabnavigator.In视图堆栈我有View1和view2.In view1我有组件comp1和comp2.In view2我有comp3和comp4.when屏幕从view1更改为view2.hide事件被调用view1.so在那个事件我保存view1的信息之前,我将在view2.but这种情况发生,每次我甚至没有改变view1..on改变视图隐藏事件被调用和请求发送到backend.so我不希望发送请求后端如果没有任何组件的变化... – Ajit 2011-04-14 20:45:47

回答

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并且每次都可以访问新信息。

希望这会有所帮助!

+0

谢谢安德鲁...希望这会有所帮助.. – Ajit 2011-04-15 04:18:27

+0

没问题,请点击绿色箭头标记我的解决方案,如果它适用于雅。 – andrewpthorp 2011-04-15 11:24:59

0

我在过去的几个项目中使用了类似于您的第一个选项的方法。在我的表单的每个控件的change事件中,我拨打了一个小函数,该函数只在我的模型中将changesMade标志设置为true。当用户尝试从我的表单导航时,我检查changesMade标志以查看是否需要保存信息。

+0

所以哪一个是更好的方法,我有容器级别的事件监听器的第二个选项..如果子组件中的总和变化,通过冒泡容器知道是否发送和事件容器使得该标记为真。 – Ajit 2011-04-15 15:07:40

0

数据模型是你的朋友!

如果您养成了从加载的数据中创建强类型数据模型的习惯,这样的问题就变得非常基础。

我一直有一个键绑定设置来生成代码snipit与此类似...

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方法是这样,这将是很容易验证的变化模型层面,将整个视图从整个过程中切割出来。