Ember.js最佳实践 - 可以/我应该覆盖sendAction吗?

时间:2017-04-25 17:07:29

标签: ember.js

在我的Ember应用程序中,我有大量的模态对话框组件,我在我的应用程序路径中呈现如下:

sendAction

所有对话框组件都从单个基类扩展,为方便起见,我已覆盖target。覆盖的重点是始终触发sendAction上的某些操作,而不是sendAction: function (actionName) { if (Em.isEmpty(this.get(actionName))) { this.set(actionName, actionName); } this._super(...arguments); }, 的默认行为"如果属性是未定义,什么都不做"。这是看起来像:

sendAction

这看起来像我期望的那样工作:总是在目标上触发一个动作然后冒泡堆栈。我想知道的是......

我不知道覆盖protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //find the gridview in the master page GridView gv = Master.FindControl("GridView1") as GridView; //add the event to the gridview gv.RowDataBound += GridView1Master_RowDataBound; gv.DataSource = mySource; gv.DataBind(); } } protected void GridView1Master_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { e.Row.BackColor = Color.Red; } } 的任何影响/副作用吗?

1 个答案:

答案 0 :(得分:0)

目前,处理组件中操作的一种更被接受的方法是通过关闭操作:

在模板中:

{{do-button id="save" clickHandler=(action "storeEvent") contextMenuHandler=(action "logEvent") buttonText="Store It"}}

在组件中:

import Ember from 'ember';

export default Ember.Component.extend({
  actions: {
    clickHandler(event) {
      this.get('clickHandler')(event);
    },

    contextMenuHandler(event) {
      event.preventDefault();
      this.get('contextMenuHandler')(event);
    }
  }
});

最后,来自控制器的摘录:

  actions: {
    doStuff(event) {
      alert(event);
    },
    logEvent(event) {
      console.log(event);
    },

所以基本上,你正在将传递给组件的动作调用它,从组件中传入你想要的任何参数。关闭动作非常好,它们使动作更轻松。希望这会让你的车轮转动:)