【问题标题】:DOM Traversing Error in Safari - Ember.jsSafari 中的 DOM 遍历错误 - Ember.js
【发布时间】:2018-06-13 12:08:33
【问题描述】:

我有我的模板类似的东西,

<ul id="items">
    {{#each items as |item index|}}
       <li>
        <!-- <input type="checkbox" id={{concat "pf" index}} /> -->
        {{input type="checkbox" id=(concat "pf" index)}}
       </li>
    {{/each}}
</ul>

我的 js 是这样的,

import Ember from "ember";

export default Ember.Controller.extend({
  appName: "Ember Twiddle",
  items: [{}],
  init: function() {
    $(document).on("click.somename", function (e) {
      alert($(e.target).parent().length); //should get parent as "li" and length as 1
    });
  }
});

我的项目发生的情况是,如果我单击 ember 输入助手,我将无法使用 jQuery 获取 parentElement。但是当我将该输入助手更改为正常的&lt;input type="checkbox" /&gt; 时,我能够获得parentElement。我不知道 Safari/Ember 是否使用任何虚拟 DOM 或其他东西来呈现它自己的助手。 此问题仅在 Safari 中发生。在 Chrome 中,它运行良好。

不幸的是,我无法制作小提琴/plunker,因为该问题无法在其中复制。对于那个很抱歉。在我的项目中,我使用的是ember@2.7.3

关于这个问题有什么建议/帮助吗?

【问题讨论】:

  • 您要查找&lt;li&gt;?因为那是&lt;input&gt; 的父级。是的,ember 使用glimmer vm 来渲染所有内容,但这应该可以。但是,您到底为什么要使用 jQuery 而不是本机 ember 操作?另外,也许您可​​以提供ember-twiddle 甚至是带有复制的git repo?这也可能与余烬事件有关,但我不确定,因为您不在这里使用它们。但也许you should read this.
  • 给定的代码只是一个示例,只是为了更清楚地说明问题。为什么我使用 jQuery 事件实际上是我创建了一些类似组件的下拉菜单,所以当我点击外部时它应该隐藏下拉菜单。这就是为什么添加$(document).on("click", () =&gt; {})。在ember-twiddle 中,我试图重现,但它似乎一切正常
  • 这看起来很奇怪,我怀疑它是一个余烬问题。你是如何使用纯 javascript 而不是 jQuery 的?也许尝试一些调试。你能在一个新的 ember 项目中重现并分享一个 git(hub?) repo 吗?
  • 嘿,我忘了说这个问题只发生在 Safari 中。对于那个很抱歉。编辑了这个问题。我会尝试在ember-twiddlerepo 中重现一些东西

标签: javascript jquery dom ember.js safari


【解决方案1】:

虽然我建议首先尝试找到一种方法来避免使用 jQuery click 事件,但这听起来像是不同浏览器如何处理 parent 的问题。我更喜欢使用.closest('li').eq(0) 来访问与您要查找的元素匹配的第一个父级。

【讨论】:

  • 我之前也试过.closest('li').length。这也没有显示父元素并将长度设为 0。如何避免使用 jQuery 来解决这个问题?你说的是纯 JavaScript?
  • 通过避免使用 jQuery,我的意思是最好向 DOM 中的元素添加一个操作,而您当前正在向其中添加点击事件侦听器。在您的 Handlebars 模板中声明有关操作的内容,并在您的组件 JS 文件中定义这些操作。组件(通常)也不应该超出自身,而 jQuery 让这样做太容易了。
  • 如果您需要跨组件通信,您可以考虑使用组件使用的服务,然后将组件中的计算属性绑定到该服务中的属性。然后该操作可以在适当的组件中,触发服务更新服务属性。
  • 你能给出这个问题的示例代码来更了解你吗?
猜你喜欢
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多