Ember.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

我试图弄清楚如何使用{{action}}助手,根据select元素中的选择设置新的Ember数据记录的属性值。以下是我的情况,简化:

item.js路径。创建模板中可用的新记录

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) {
    ...
  }
}