2011-04-14 134 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方法是這樣,這將是很容易驗證的變化模型層面,將整個視圖從整個過程中切割出來。