帮助容器

时间:2011-04-14 17:53:57

标签: flex flex3

我正在使用视图堆栈...所以当视图更改时,就像我们从一个页面移动到另一个页面时,将调度hide事件。所以我在隐藏事件中保存最后一页的信息,然后再转到下一页。但是是,如果我改变什么仍然改变视图隐藏事件被调用nd调用转到后端...我只是想要只在视图中的总和改变时调用...像总和文本值...所以我有两个选项

  1. 在每个组件上使用事件监听器,如果sumthing更改,则使标志为true ... nd hide event check,如果flag为true则向后端发送调用。

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

  3. 我怀疑容器......

    • 我可以使用容器,怎么样?
    • 我不能使用容器的原因?
    • 无论哪种方式有利有弊?

3 个答案:

答案 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,那么在模型级别上验证更改将非常容易,从而完全切断视图。