代码之家  ›  专栏  ›  技术社区  ›  Alin P.

在进程中提示用户进行确认

  •  3
  • Alin P.  · 技术社区  · 14 年前

    我在找一个好的方法 有时 暂停操作(函数/方法调用),直到用户确认要执行该操作的特定部分。我需要在不允许代码执行停止的环境中完成这项工作(在我的例子中是ActionScript,但是JavaScript的方法应该是相同的)。

    <preliminary-phase> // this contains data needed by all the following phases //
    
    <mandatory-phase> // this will be always be executed //
    
    <optional-phase> // this will always execute too, if in this form, but in some cases we need to ask the user if he wants to do it //
    
    <ending-phase> // also mandatory //
    



    我需要的是插入一个有条件的用户提示,一个“是否要执行此部分?”,并且 <optional-phase> 只有当用户想要的时候。

    <preliminary-phase>
    
    <mandatory-phase>
    
    if(<user-confirmation-is-needed> and not <user-response-is-positive>){
        <do-nothing>
    }
    else{
        <optional-phase>
    }
    
    <ending-phase>
    



    在ActionScript/JavaScript中尝试这样做时,我得到了如下信息:

    <preliminary-phase>
    
    <mandatory-phase>
    
    if(<user-confirmation-is-needed>){
        askForConfirmation(callback = function(){
            if(<user-response-is-positive>)
                <optional-phase>
            <ending-phase>
        });
        return;
    }
    
    <optional-phase>
    
    <ending-phase>
    

    现在两者 < <ending-phase> 是重复的。也因为它们使用在 <preliminary-phase>


    我现在的解决办法是 < <结束阶段> <初步阶段>

    你们推荐什么?

    笔记:
    一。 askForConfirmation return; 以我的方式)。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Joony s3rro    14 年前

    注:我不能百分之百确定我知道你的确切情况。

    您有一个按顺序执行的命令数组。

    [<preliminary-phase>, <mandatory-phase>, <optional-phase>, <ending-phase>]
    

    只需一次将命令从数组中移出一个并调用execute方法。

    您还可以创建一个命令树,这样就可以清楚地说明执行流,而不必干扰数组。

    安装向导之类的程序就是这样工作的。

    这是很好的,因为执行顺序是好的和可见的,并且您的代码很好地分解成块,并且每个步骤的复杂性被封装。例如,可选阶段对结束阶段一无所知。可选阶段只知道用户在执行之前可能需要提示,它在内部处理所有这些。

    http://en.wikipedia.org/wiki/Command_pattern

    “使用命令对象可以更容易地构造需要委托的通用组件, 序列

        2
  •  1
  •   Dave Aaron Smith    14 年前

    “代码不再按照它的执行顺序”实际上对我来说似乎很好。如果代码不是按顺序编写的,只要代码清楚,就可以执行。事实上,由于你的代码是以可变的顺序执行的,我认为你不可能按照它执行的顺序来编写它而不复制代码,这是一个更大的罪恶。选择好的函数名,你的方法就会通过我的代码审查。

    <preliminary-phase>
    
    <mandatory-phase>
    
    var optional_phase = function() {
      <optional-phase>
    }
    
    var ending_phase = function() {
      <ending-phase>
    }
    
    if(<user-confirmation-is-needed>){
        askForConfirmation(function(){
            if(<user-response-is-positive>)
                optional_phase();
            ending_phase();
        });
        return;
    }
    
    optional_phase();
    ending_phase();
    
        3
  •  0
  •   just mike    14 年前

    这符合你的要求吗?

    <preliminary-phase>
    
    <mandatory-phase>
    
    if(<user-confirmation-is-needed>){
        askForConfirmation(function(){
            if(<user-response-is-positive>)
                <optional-phase-as-local-function>
            <ending-phase-as-local-function>
        });
    } else {
        <optional-phase-as-local-function>
        <ending-phase-as-local-function>
    }
    
        4
  •  0
  •   PatrickS    14 年前

    <preliminary-phase>
    
    <mandatory-phase>
    
    if(<user-confirmation-is-needed>){
        askForConfirmation(function(){
          if(<user-response-is-negative>)
          {
            <ending-phase>
            return;
          }
      });
    }
    
    <optional-phase>
    <ending-phase>
    
    推荐文章