【问题标题】:Ember bind action from property来自属性的 Ember 绑定操作
【发布时间】:2014-01-27 09:31:14
【问题描述】:

在 Ember 中,我试图从视图中的属性绑定模板中的操作。

App.MyView = Ember.View.extend({
items: [
    {title: Em.I18n.t("admin.action.clone"), icon: "copy", action: "clone"},
    {title: Em.I18n.t("admin.action.new"), icon: "plus", action: "new"}
]
});

在模板中:

{{#each itm in view.items}}
        <a {{action itm.action}}>{{itm.title}}</a>
{{/each}}

Action 采用文字字符串itm.action 并且不执行绑定。导致错误提示 itm.action 未处理。

有没有一种方法可以让动作助手在为动作冒泡之前执行该绑定?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    一种解决方法是在代理处理程序方法中触发特定于项目的操作:

    查看

    App.MyView = Ember.View.extend({
      items: [
        {title: Em.I18n.t("admin.action.clone"), icon: "copy", action: "clone"},
        {title: Em.I18n.t("admin.action.new"), icon: "plus", action: "new"}
      ],
    
      actions: {
        handleItemClick: function(item) {
          var action = item.get('action');
          this.send(action);
        }
      }
    });
    

    模板

    {{#each itm in view.items}}
      <a {{action "handleItemClick" itm target="view"}}>{{itm.title}}</a>
    {{/each}}
    

    编辑

    动态动作名称现在在 master 中。看看:https://github.com/rjackson/ember.js/commit/7396b37172b59e27647a07574ea7051ab06d001a

    【讨论】:

    • 感谢您的回复!我只是在尝试这个!它按预期工作。我真的在寻找一种更通用的方式,这样我的模板就不必绑定到特定的处理程序。一个想法是在应用程序路由/控制器上创建该处理程序,但我必须找到一种方法将其冒泡到我的活动路由/控制器,这是不可能的/天主教恕我直言。
    • 这是个好消息!不幸的是,我不能在我的应用程序中使用金丝雀版本。必须是适当的释放!感谢您的信息!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-26
    • 2017-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多