Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/437.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在ember.js中相对于单击的动作定位模态_Javascript_Html_Ember.js - Fatal编程技术网

Javascript 如何在ember.js中相对于单击的动作定位模态

Javascript 如何在ember.js中相对于单击的动作定位模态,javascript,html,ember.js,Javascript,Html,Ember.js,我有一个emberjs应用程序,用户可以: 单击链接 模态弹出 换东西 点击离开模态 保存更改 我创建了一个模式,就像在一条路线上创建事件一样。我可以将ember对象解析到路由中,但似乎无法获得单击的DOM元素。我想获取单击的DOM元素,因为我需要它的位置。我想相对于单击的DOM元素定位一个弹出窗口 我在.hbs文件中的操作如下所示: <a {{action open option}} class='choose-template'>Choose Template</a>

我有一个emberjs应用程序,用户可以:

单击链接 模态弹出 换东西 点击离开模态 保存更改

我创建了一个模式,就像在一条路线上创建事件一样。我可以将ember对象解析到路由中,但似乎无法获得单击的DOM元素。我想获取单击的DOM元素,因为我需要它的位置。我想相对于单击的DOM元素定位一个弹出窗口

我在.hbs文件中的操作如下所示:

<a {{action open option}} class='choose-template'>Choose Template</a>

我在App.ModalView.didInsertElement()中处理模型定位。在这里,我想使用链接DOM元素使模态自身相对于单击的链接进行定位

如果不在
视图中拦截
操作
事件
它们会一直冒泡到没有可用事件的路由。因此,为了获得事件的元素位置,您应该在
视图中定义并捕获
操作
事件

因此,与其在
路径中使用事件处理程序,不如在
视图中创建它们:

例子: 更新: 再请注意,默认情况下,您操作的目标是控制器,因此如果您想将
视图作为目标,您应该定义它:

<a {{action open option target="view"}} class='choose-template'>Choose Template</a>
选择模板
希望能有帮助

App.ModalView = Ember.View.extend({
  open: function(event) {
    // here your then have access to your event

    // Example on getting the position
    var posX = this.$().position().left,posY = this.$().position().top;
    console.log((event.pageX - posX) + ' , ' + (event.pageY - posY));

    // and then you could invoke the functions you want on your controller by
    this.get('controller').send('open', andhereparameters);
  },

  close: function(event) {
    // here your then have access to your event
    // same as above
  }
});
<a {{action open option target="view"}} class='choose-template'>Choose Template</a>