You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ember中无法向action传递参数的问题求助

解决Ember中Action无法传递参数的问题

嘿,我一看你的代码就发现问题出在哪了——你用错了Ember Action传递参数的方式!不是不能传参,只是写法不对导致参数一直是undefined。

问题根源

你模板里写的{{action "selectGIF" value=gif}}是错误的:Ember的Action助手传递参数不需要用key=value的形式,value=gif这种写法其实是在给action助手配置选项,不是传递参数,所以控制器里的num自然拿不到值。

一步一步修正

1. 改模板里的Action调用

把参数直接放在action名称后面就行,就像这样:

<div class="gif-display">
  {{#each giffy as |gif index|}}
    <img width="150px" {{action "selectGIF" gif}} src={{gif.images.original.url}}>
  {{/each}}
</div>

如果之后需要传递索引index,直接追加参数就行:{{action "selectGIF" gif index}}

2. 调整控制器的逻辑

现在传递的是完整的gif对象,你就不用再通过gifs[num]去取值了,直接用参数里的对象就行。另外注意你代码里的gifs变量没定义,建议改成控制器属性的写法:

selectGIF: function (selectedGif) {
  console.log("选中的GIF:", selectedGif);
  let newPost = this.store.createRecord('post', {
    email: this.get("session.currentUser.email"),
    body: `${selectedGif.images.original.url}`,
    timestamp: new Date().getTime(),
    image: true
  });
  // 如果gifs是控制器的属性,用this.set来修改
  this.set("gifs", '');
  newPost.save();
}

额外提醒

你说其他地方{{action "函数名"}}写法正常,是因为那些场景不需要传参,所以没问题;一旦要传参,必须把参数直接放在action名称后面,不能用键值对的形式。完全不需要额外用helper函数,用标准的action传参方式就搞定了。

内容的提问来源于stack exchange,提问作者anon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:55:58