我正在尝试使用{{action}}帮助器,根据select元素中的选项设置新Ember数据记录的属性值。以下是我的简化情况:
item.js route.创建模板中可用的新记录。
model() {
return this.store.createRecord('item');
}
new-item.hbs模板. select-element触发设置新项的颜色属性的操作。
<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>
项目.js控制器。
actions: {
setColor(item, option) {
console.log(option);
record.set('color', option);
console.log(item);
}
}
log(option)不返回任何内容。record.set工作正常,我可以硬编码选项,并且console.log(item)将显示新的item对象设置了颜色属性。
另一方面,如果我用
onChange={{action 'setColor' value="target.value"}}
这个颜色会从动作中被正确地记录下来。2但是如果我像以前一样用{{action... on=“change”}}语法将“model”添加到那个动作调用中,console.log(option)返回undefined,console.log(item)返回一个没有附加模型对象的Event。
**问题是:**如何将 * target.value * 和 * model传递给setColor操作?
2条答案
按热度按时间lstz6jyr1#
默认情况下,
setColor
函数将接收event
属性作为最后一个参数。因此,
value
属性将从event
中检索。因此,这将按预期工作。但是value
属性将尝试从model
属性获取target.value
,因为我们将model
作为第一个参数发送,而默认event
参数将作为第二个参数传递因此,组合不起作用解决方法是
和内部动作,
w9apscun2#
我只是遇到了同样的问题,但对这里接受的答案不满意,因为我有2个不同的输入(下拉菜单和文本字段),使用相同的操作(但不是相同的路径来解析值),所以我不得不使用
value="..."
作为操作助手的一部分。我在https://stackoverflow.com/a/45762071/45948中找到了答案
所以在你的情况下,它将是:
然后简单地: