2017-03-26 98 views
2

當在FormFlow中定義動態按鈕時,似乎Define函數被多次調用(在每個字段被詢問後)。FormFlow DefineAsyncDelegate被多次調用

定義函數正在執行繁重的命令,我們希望避免不必要的時候。這些命令用於計算動態按鈕值。 有沒有辦法避免多次執行define函數?例如,只有在用戶完成特定字段之後? 有沒有辦法知道具體領域何時完成?

public static IForm<BoardForm> BuildForm() 
    { 
     return new FormBuilder<BoardForm>() 
      .Field(new FieldReflector<BoardForm>(nameof(ExistingAccountName)) 
       .SetType(null) 
       .SetActive(IsExistingClusterChosen) 
//This is a heavy function which is called multiple times 
       .SetDefine(DefineExistingAccountName)) 
.Build(); 
    } 

感謝您的幫助!

回答

1

我面臨同樣的問題,廣泛的調試和Web搜索沒有幫助我找到多次執行的根本原因。但我可以建議你實現一個簡單的解決方法:

private IForm<BoardForm> BuildOrderForm() 
{ 
    var isSetDefineExecuted = false; 

    return new FormBuilder<BoardForm>() 
     .Field(new FieldReflector<BoardForm>(nameof(ExistingAccountName)) 
     .SetType(null) 
     .SetActive(IsExistingClusterChosen) 
      .SetDefine(async (state, field) => 
      { 
       if (isSetDefineExecuted) 
       { 
        return true; 
       } 

       isSetDefineExecuted = true; 

       // Your code 
      })) 
     .Build(); 
} 

isSetDefineExecuted標誌阻止後的第一個任何額外的執行。它返回true以表示「成功」執行,因爲返回false會導致無限循環的調用。