javascript - Ember 在组件内执行错误/多个操作

标签 javascript ember.js handlebars.js

我在 Ember 中编写了一个小型数组编辑器作为组件,它运行良好。

App.ArrayEditorComponent = Ember.Component.extend({
  actions: {
    add: function() {
      var value = this.get('inputValue');
      if(!value) {
        return;
      }
      var items = this.get('items');
      if(!items.contains(value)) {
        items.pushObject(value);
        this.set('inputValue', '');
      }
    },
    remove: function(item) {
      var items = this.get('items');
      items.removeObject(item);
    }
  }
});

下面的模板已清除类,check the fiddle以获得精确的标记。

<div>
  <label {{bind-attr for="view.inputField.elementId"}}>{{label}}</label>
  <div>
    <div>
      {{input viewName="inputField" valueBinding="inputValue" placeholderBinding="placeholder" class="form-control" action="add"}}
      <span>
        <button type="button" {{action add}}>Add</button>
      </span>
    </div>

    <ul>
      {{#each item in items}}
      <li>
        <button {{action remove item}}>Remove</button>
        {{item}}
      </li>
      {{/each}}
    </ul>
  </div>
</div>

现在我想添加使用回车键添加项目的可能性,而不必单击“添加”按钮,所以我添加了 action="add"到输入助手,它将触发 add -按下return时的 Action 。但是,如果有任何可用项目,它也会调用 remove - 在添加新项目之前对第一个项目执行操作。 Add -按钮仍然可以正常工作。

我也尝试过enter="add"但结果相同。

这是 fiddle :http://emberjs.jsbin.com/nadeputa/1/edit

这似乎和我有包装有关<form> -element,如果我删除它,它只会执行 add - 采取应有的行动。然而,我使用 Bootstrap 来设计我的应用程序,因此我无法真正摆脱表单而不弄乱一切。

谁能解释为什么会发生这种情况以及我该如何解决它?

最佳答案

这并不是 Ember 特有的。在表单中的文本字段上按 Enter 键会导致同一表单中的默认按钮就像被单击一样。

请参阅Implicit Submission HTML 规范的一部分,具体来说:

在文本字段聚焦时按下“enter”键会隐式提交表单),然后对于默认按钮具有定义的激活行为的表单执行此操作必须导致用户代理运行合成单击激活步骤该默认按钮。

关于javascript - Ember 在组件内执行错误/多个操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24873660/

相关文章:

javascript - Rails will_paginate 无休止的滚动,带有一个删除前 3 个项目的数组

javascript - Javascript 中的平均值

ember.js - 如何通过按 ember 中的后退按钮从 socket 中删除 View ?

javascript - 缺少字段的 Handlebars 输出为空

javascript - 获取 AJAX 请求并循环 JSON

javascript - 我可以在一台服务器上运行 2 个进程吗,一个用于监听请求,另一个在某些数据存储上处于轮询循环中

ember.js - 保存parent_id与ember数据的关系

javascript - Ember 数据、关系和 JSON

template-engine - 带有 "div"标签而不是 "script"的 Handlebars 模板

ember.js - ember js Handlebars 模板中绑定(bind)Attr的未绑定(bind)版本