ember.js Ember:使用从元素传递的操作设置属性的值< select>

x0fgdtte  于 2022-11-05  发布在  其他
关注(0)|答案(2)|浏览(142)

我正在尝试使用{{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操作?

lstz6jyr

lstz6jyr1#

默认情况下,setColor函数将接收event属性作为最后一个参数。

onChange={{action 'setColor' value="target.value"}}

因此,value属性将从event中检索。因此,这将按预期工作。但是

onChange={{action 'setColor' model value="target.value"}}

value属性将尝试从model属性获取target.value,因为我们将model作为第一个参数发送,而默认event参数将作为第二个参数传递因此,组合不起作用
解决方法是

onChange={{action 'setColor' model}}

和内部动作,

actions: {
  setColor(model, event) {
    let value = event.target.value;
  }
}
w9apscun

w9apscun2#

我只是遇到了同样的问题,但对这里接受的答案不满意,因为我有2个不同的输入(下拉菜单和文本字段),使用相同的操作(但不是相同的路径来解析值),所以我不得不使用value="..."作为操作助手的一部分。
我在https://stackoverflow.com/a/45762071/45948中找到了答案
所以在你的情况下,它将是:

onChange={{action (action 'setColor' model) value="target.value"}}

然后简单地:

actions: {
  setColor(model, option) {
    ...
  }
}

相关问题