我在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>
现在我想添加使用enter-key添加项目的可能性,而不必单击&#34; Add&#34; -button,所以我将action="add"
添加到input-helper,它将按add
时触发return
- 操作。但是,如果有任何可用项目,它还会在添加新项目之前调用第一项上的remove
- 操作。 Add
- 按钮仍然可以正常工作。
我也试过enter="add"
,但结果相同。
这是小提琴:http://emberjs.jsbin.com/nadeputa/1/edit
似乎与我有一个包装<form>
- 元素有关,如果我删除它只是执行add
- 动作应该。然而,我使用Bootstrap来设计我的应用程序样式,这样我就无法在不弄乱所有内容的情况下摆脱这种形式。
有人能够解释为什么会这样,以及我如何解决它?
答案 0 :(得分:1)
当你点击Enter
输入字段操作时,第一个列表项的按钮是triggert,但我不知道原因。
但我可以给你一个解决方法:
button
代码更改为div
代码form
标记放入组件form
代码:{{action 'submit' on='submit'}}
submit
submit
操作应如下所示:
submit: function () {
this.trigger('add');
}
这是你修改过的jsbin:
答案 1 :(得分:1)
这不是Ember特有的。在表单中的文本字段上按Enter键会导致同一表单中的默认按钮的行为就像单击它一样。
请参阅HTML规范的Implicit Submission部分,具体为:
hitting the "enter" key while a text field is focused implicitly submits the form), then doing so for a form whose default button has a defined activation behavior must cause the user agent to run synthetic click activation steps on that default button.