Ember.js 余烬:使用从元素传递的操作设置属性的值
我试图弄清楚如何使用{{action}}助手,根据select元素中的选择设置新的Ember数据记录的属性值。以下是我的情况,简化: item.js路径。创建模板中可用的新记录Ember.js 余烬:使用从元素传递的操作设置属性的值,ember.js,ember-data,html-select,Ember.js,Ember Data,Html Select,我试图弄清楚如何使用{{action}}助手,根据select元素中的选择设置新的Ember数据记录的属性值。以下是我的情况,简化: item.js路径。创建模板中可用的新记录 model() { return this.store.createRecord('item'); } new-item.hbs模板。select元素触发设置新项目的颜色属性的操作 <select {{action 'setColor' model value="target.value" on="chang
model() {
return this.store.createRecord('item');
}
new-item.hbs模板。select元素触发设置新项目的颜色属性的操作
<select {{action 'setColor' model value="target.value" on="change"}}>
<option value="">choose</option>
<option value="white">white</option>
<option value="blue">blue</option>
<option value="red">red</option>
<option value="yellow">yellow</option>
</select>
Console.logoption不返回任何内容。record.set工作正常,我可以硬编码该选项,console.logitem将显示新的item对象设置了color属性
另一方面,如果我只需要
onChange={{action 'setColor' value="target.value"}}
从操作中正确记录颜色。但是,如果我像以前一样使用{{action…on=change}}语法将模型添加到该操作调用中,console.logoption将返回未定义的,console.logitem将返回未附加模型对象的事件
问题是:如何将target.value和model传递给setColor操作?默认情况下,setColor函数将接收事件属性作为最后一个参数
onChange={{action 'setColor' value="target.value"}}
所以值属性将从事件中检索。因此,这将如预期的那样起作用。但是
onChange={{action 'setColor' model value="target.value"}}
value属性将尝试从model属性获取target.value,因为我们将model作为第一个参数发送,而默认事件参数将作为第二个参数传递。所以合并是行不通的
解决办法是
onChange={{action 'setColor' model}}
以及内部行动,
actions: {
setColor(model, event) {
let value = event.target.value;
}
}
我只是有同样的问题,但对这里接受的答案不满意,因为我有两个不同的输入下拉列表&文本字段,它们使用相同的操作但不是相同的路径来解析值,所以我必须使用value=。。。作为动作助手的一部分 我从中找到了答案 因此,在您的情况下,它将是:
onChange={{action (action 'setColor' model) value="target.value"}}
然后简单地说:
actions: {
setColor(model, option) {
...
}
}
实际上,事件作为第二个参数传递。它总是作为最后一个论点通过
actions: {
setColor(model, option) {
...
}
}