在组件中使用 this.sendAction()?
Using this.sendAction() in components?
我正在使用 Ember 2.2.0
在编写组件时,我曾经使用 this.sendAction(…)
将事件从组件传播到路由(或嵌入组件的任何内容)。我最近查看了文档,发现他们建议另一种方法。
https://guides.emberjs.com/v2.2.0/components/triggering-changes-with-actions/
this.get('action')();
因为众所周知 Ember 非常固执己见,所以我想尽可能多地坚持最佳实践。但我不确定文档是否已过时或使用 sendActions 的教程是否已过时。
请问有什么方法可以做到这一点?
当你使用 this.sendAction('actionName')
时,你正在冒泡一个动作,你必须用 actions
赶上 component/controller
//controller/route/component.js
actions: {
actionName: function() {
//Do something
}
}
如果你想把它发送到链上,你必须在 component/controller 上再次调用 sendAction('')
并在父级上再次捕获它(依此类推)。
另一种方法 this.get('action')()
使用闭包操作,它们是常规的 javascript 函数。据我所知,这些是在 Ember 1.13.X 中调用操作的首选方式。闭包动作的一个优点是你可以有 return 个值。这意味着你可以拥有这样的东西:
//a controller
actions: {
saveResult() {
return this.get('model').save(); //notice the return (which returns a promise)
}
}
//some template that uses the controller above
{{a-component save=(action 'saveResult')}} // Passes the saveResult action to the component
//a-component.js
actions: {
someAction: function() {
this.attrs.save().then(() => {
//Do something with the return value
});
}
}
关于闭包操作可以写很多,但其他人写得比我好得多,所以我推荐以下文章:
如果您是整个 DDAU(数据向下操作向上)概念的新手,我真的建议 Sam's article 总体上了解这个概念。
更新:还有一个允许 closure actions to bubble to routes 的插件(链接在@locks 的评论中)。请注意,如果您希望将 Ember 升级到更新的版本(3.8 及更高版本),route-action
s 将不兼容。
对于使用 Ember 版本 >=3.4 的用户:
Use closure actions instead of sendAction
sendAction
已在 3.4 中 弃用。您可以在相关弃用文本下找到如何定义关闭操作的示例:
https://deprecations.emberjs.com/v3.x/#toc_ember-component-send-action
我正在使用 Ember 2.2.0
在编写组件时,我曾经使用 this.sendAction(…)
将事件从组件传播到路由(或嵌入组件的任何内容)。我最近查看了文档,发现他们建议另一种方法。
https://guides.emberjs.com/v2.2.0/components/triggering-changes-with-actions/
this.get('action')();
因为众所周知 Ember 非常固执己见,所以我想尽可能多地坚持最佳实践。但我不确定文档是否已过时或使用 sendActions 的教程是否已过时。
请问有什么方法可以做到这一点?
当你使用 this.sendAction('actionName')
时,你正在冒泡一个动作,你必须用 actions
//controller/route/component.js
actions: {
actionName: function() {
//Do something
}
}
如果你想把它发送到链上,你必须在 component/controller 上再次调用 sendAction('')
并在父级上再次捕获它(依此类推)。
另一种方法 this.get('action')()
使用闭包操作,它们是常规的 javascript 函数。据我所知,这些是在 Ember 1.13.X 中调用操作的首选方式。闭包动作的一个优点是你可以有 return 个值。这意味着你可以拥有这样的东西:
//a controller
actions: {
saveResult() {
return this.get('model').save(); //notice the return (which returns a promise)
}
}
//some template that uses the controller above
{{a-component save=(action 'saveResult')}} // Passes the saveResult action to the component
//a-component.js
actions: {
someAction: function() {
this.attrs.save().then(() => {
//Do something with the return value
});
}
}
关于闭包操作可以写很多,但其他人写得比我好得多,所以我推荐以下文章:
如果您是整个 DDAU(数据向下操作向上)概念的新手,我真的建议 Sam's article 总体上了解这个概念。
更新:还有一个允许 closure actions to bubble to routes 的插件(链接在@locks 的评论中)。请注意,如果您希望将 Ember 升级到更新的版本(3.8 及更高版本),route-action
s 将不兼容。
对于使用 Ember 版本 >=3.4 的用户:
Use closure actions instead of
sendAction
sendAction
已在 3.4 中 弃用。您可以在相关弃用文本下找到如何定义关闭操作的示例:
https://deprecations.emberjs.com/v3.x/#toc_ember-component-send-action