2017-03-26 95 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会导致无限循环的调用。