【问题标题】:How to change the on-click Event of a Button in Dart如何在 Dart 中更改按钮的点击事件
【发布时间】:2014-10-08 14:31:42
【问题描述】:

我的问题是在每行的最后一个<td> 中有一个带有编辑按钮的表格。按下编辑时,<td>s 更改为 <input>s,效果非常好。我的按钮如下所示:

<td><button on-click="{{editThis}}">Edit</button></td>

所以当它被按下时,editThis 函数将被调用。但我希望我的按钮现在将显示“保存”,如果按下应该调用“saveThis”函数。

void editThis(Event e, var detail, Node sender) {
   e.preventDefault();
   /* ... does not matter ... */

   (sender as ButtonElement).text = "Save"; 
   (sender as ButtonElement).setAttribute("on-click", {{saveThis}});
}

按钮仍然调用editThis 函数。 Dartium 显示:

<button on-click="{{saveThis}}">Save</button>

任何想法为什么它不起作用或如何解决这个问题?

【问题讨论】:

    标签: dart dart-polymer dart-html


    【解决方案1】:

    自己找到了解决方案:)

        void editThis(Event e, var detail, Node sender) {
        e.preventDefault();
        print("edit called");
    
        /* Does not matter */
    
        ButtonElement newButton = new ButtonElement();
        newButton.text = "Save";
        newButton.onClick.listen((event) => saveThis());
        sender.replaceWith(newButton);
      }
    

    【讨论】:

      【解决方案2】:

      您可以在单击功能中处理两次点击:

      void editThis(Event e, var detail, Node sender) {
         e.preventDefault();
         /* ... does not matter ... */
      
         var button = (sender as ButtonElement);
         if(button.text == "Save") {
           // Do save action
           button.text = "Edit";
         } else if (button.text == "Edit") {
           // Do edit action
           button.text = "Save";
         }
      }
      

      【讨论】:

      • 好吧,我想这会起作用。但我不喜欢该函数通过按钮上的文本处理按钮的调用函数。那应该是点击属性的工作
      【解决方案3】:

      我认为最简单的方法是在您的元素模型中设置一个状态,例如 @observable bool isEdit = false;,然后使用

      <td>
        <template if="{{isEdit}}">
          <button on-click="{{editThis}}">Edit</button>
        </template>
        <template if="{{!isEdit}}">
          <input type="text"><button on-click="{{saveThis}}">Save</button>
        </template>
      </td>
      

      【讨论】:

      • td 和模板标签不幸不能一起工作。它是一个已知的问题。 td 将被浏览器忽略。那是我的实际问题,所以我在 Polymer 中创建了一个扩展的 td 标签,所以我可以在不使用表中的模板标签的情况下更改我的 td 标签
      • 我稍微修改了我的答案。您的问题没有包含足够的信息来查看您尝试使用它的方式/位置。
      • 因为每个 tr 都有一个编辑按钮,所以所有按钮都会改变。我也认为模板标签甚至不能在表格中工作
      • Polymer 中存在一个已知问题。等我回家再回答这个问题。
      • 它可以在 &lt;td&gt; 中工作。在&lt;tr&gt; 我不确定。 &lt;tr template if="{{xxx}"&gt; 可以工作。如果您对这些单元格中的每一个都有一个模型,它会起作用,但您的问题没有包含足够的信息来查看您希望如何使用它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-09-15
      • 2022-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多