【问题标题】:EmberJs {{ action }} helper in a view doesn't work视图中的 EmberJs {{ action }} 助手不起作用
【发布时间】:2013-10-25 03:55:37
【问题描述】:

我正在尝试在我的 ember 应用中添加引导模式。我希望能够使用指定的模板添加模式并能够处理操作。我无法让它工作。模态出现,我的控制器的属性已绑定,但我无法处理操作。我不明白为什么。我真的很希望能够从我的控制器中的任何地方触发模态并在它们上绑定操作。

我的观点是这样的:

App.ModalView = Ember.View.extend({
    classNames:         ['modal fade'],
    attributeBindings:  ['role'],
    role:               'dialog',

    didInsertElement: function() {
        this._super();
        this.$().modal();
        this.$().on('hidden.bs.modal', this.close.bind(this));
    },
    close: function(event) {
        return this.destroy();
    }
});

我在随机控制器中这样实例化它:

var modal = controller.container.lookup('view:modal');
modal.reopen({
    controller:     this,
    targetObject:   this,
    templateName:   'mymodal'
});

return modal.appendTo('body');

我的模板如下所示:

<div class="modal-dialog">
   <div class="modal-content">
      <div class="modal-header">
         <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
         <h4 class="modal-title">My Modal Title</h4>
      </div>
      <div class="modal-body">
        <div class="row">
           <div class="col-md-12">
               My modal content
           </div>
        </div>
      </div>
      <div class="modal-footer">
         <button type="button" data-dismiss="modal" class="btn default">Close</button>
         <button type="button" class="btn green" {{ action "myaction"}}>My Button with an action</button>
      </div>
   </div>
</div>

如果我尝试显示一些控制器属性,它会起作用。但是当我单击带有“myaction”操作的按钮时,什么也没有发生。也许我对在我的应用程序中处理模式的方式完全错误(我在 Ember 的世界中很新)。 我正在使用最后一个版本的 ember (1.1.1) 和 bootstrap 3。

谢谢,

Vinc

【问题讨论】:

  • 我没有在你的视图中看到 myaction 定义,另外你在哪里找到创建这样一个视图的信息?
  • 我没有 myaction 处理程序,但我应该得到消息表明没有任何东西可以处理“myaction”操作 :) 我们必须创建这样的视图,否则我们会收到一个已弃用的错误(我可以如果您愿意,可以找到您的链接)

标签: view ember.js action


【解决方案1】:

我想通了。事实上,我的应用程序正在运行到一个特定的 dom 元素 (#app)。当我将视图添加到正文时,我的模式被添加到我的应用程序“外部”!所以,事件的冒泡链被打破了。我没有将视图添加到正文中,而是将其添加到我的应用程序根元素中,现在一切正常!

【讨论】:

    【解决方案2】:

    模态方法很有可能将其与主体断开连接,这会破坏您的操作。

    另请参阅:Ember.js and Foundation 4 modal window

    【讨论】:

      【解决方案3】:

      你不应该像这样访问视图

      var modal = controller.container.lookup('view:modal');

      见 Wycats 评论 here

      或者,This answer 可以帮助您实例化模态

      【讨论】:

      • 正确的方法是什么?我应该用 App.ModalView.create() 实例化它吗?如果我使用 create(),我会收到以下错误:弃用:不再支持使用 defaultContainer。 [defaultContainer#lookup] 见:git.io/EKPpnA
      • 您不需要创建、附加或删除视图。让框架处理这个。您可以使用render 方法,它将处理所有这些。
      • 我尝试了您在要点中建议的解决方案。使用“render”方法将带有事件的模态打开处理到应用程序路由中。但最后,我有很多限制:无法访问我的视图对象。不能在这个视图上触发事件,不能简单地配置我的视图,必须自己处理引导动画的东西,等等......使用“ModalManager”,管理我的模式变得更容易:打开/关闭,等等……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2017-10-17
      • 2016-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多