当前位置:  开发笔记 > 编程语言 > 正文

在组件中使用this.sendAction()?

如何解决《在组件中使用this.sendAction()?》经验,为你挑选了1个好方法。

我使用的是Ember 2.2.0

在编写组件时,我曾经将事件从组件传播到路由(或者嵌入组件的任何东西)this.sendAction(…).我最近检查了文档并发现他们建议另一种方法. https://guides.emberjs.com/v2.2.0/components/triggering-changes-with-actions/

this.get('action')();

由于已知Ember非常自以为是,我希望尽可能多地遵循最佳实践.但我不确定文档是否过时或使用sendActions的教程是否过时.

所以我想要这样做的方法是什么?



1> Pedro Rio..:

当你使用时,this.sendAction('actionName')你正在冒充一个你必须在组件/控制器上捕获的动作actions

//controller/route/component.js
actions: {
  actionName: function() {
    //Do something
  }
}

如果你想在链中发送它,你将不得不sendAction('')再次在组件/控制器上调用并在父节点上再次捕获它(依此类推).

另一种方法this.get('action')()使用闭包动作,这是常规的javascript函数.据我所知,这些是在Ember 1.13.X中调用操作的首选方法.关闭动作的一个巧妙之处是你可以拥有返回值.这意味着你可以拥有这样的东西:

//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
     });
  }
}

关于闭包动作可以写很多,但其他人写得比我好得多,所以我推荐以下文章:

Ember关闭行动#1

Ember关闭行动#2

Ember关闭行动#3

如果你是整个DDAU(Data Down Actions Up)概念的新手,我真的推荐Sam关于这个概念的文章.

更新:还有一个插件(在@locks的评论中链接)允许关闭操作冒泡到路由.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有