如何在 ember 视图之外获取 DOM 元素?
How to get an DOM element outside of ember view?
我目前正在开发一个应用程序,我们正在将整个应用程序移动到 ember,但截至目前,该应用程序正在使用 JSP 和 jquery。
我的问题是我的 ember 应用程序目前正通过 对象 tag.now 插入到 jsp 页面中,我想知道此标记的 class 并相应地呈现路线。
当我试图找到 $('object') 时,我一无所获。
我尝试了其他几个可用的选项,但没有成功。
我的索引路线目前正在加载主页路线,但我想根据对象标签上可用的 class 加载路线。
下面是我的index.js
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel() {
console.log(this);
this.replaceWith('rentals');
}
});
我的 jsp 有这个代码片段,以便添加我想要的 ember 应用程序
var url = "../../rdm/ember/dist/index.html";
if(page == "user")
{
$(".ui-layout-center").html( '<object type="text/html" class="user"></object>');
$("object").attr('data',url);
mdmCurrentRequestObj = $(".ui-layout-center object");
}
else
{
$(".ui-layout-center").html( '<object type="text/html" class="userprofile"></object>');
$("object").attr('data',url);
mdmCurrentRequestObj = $(".ui-layout-center object");
}
据我所知,你应该可以正常使用JQuery。可能还有其他问题。我认为这个问题与 Ember.
没有任何关系
要尝试的事情:
- 您是说使用三等号吗?
page === "user"
单个 equals 可能会导致奇怪的事情。
- 如果您查看 Chrome Inspector
,请在 DOM 中查找对象标签
- 当 DOM 准备就绪时,确保插入对象的代码是 运行
- 执行一些控制台日志记录以查看是否真的找不到对象,或者属性设置只是失败
- 尝试包括内联数据属性,例如
<object type="text/html" class="user" data=${data}></object>
(将字符串用反引号而不是引号括起来)
- 确认
ui-layout-center
作为 class 存在(例如不是 id)
- 创建一个最小示例,将任何其他类型的元素插入 DOM,然后尝试设置属性。例如,尝试插入一个带有ID的div,然后查找
一旦您成功从 DOM 获取对象,您可能需要查询和修改对象本身的内容。其语法类似于:
$('#some-object').contents().find('.some-element').text("some text")
只是为了那些用谷歌搜索它并搜索这个答案的人,当你的元素在 DOM 之外时,你需要获取它然后进行更改。我为获取元素所做的工作如下
Ember.$(window.self.top.document).find('object').hasClass("user")
而且效果很好。
我目前正在开发一个应用程序,我们正在将整个应用程序移动到 ember,但截至目前,该应用程序正在使用 JSP 和 jquery。
我的问题是我的 ember 应用程序目前正通过 对象 tag.now 插入到 jsp 页面中,我想知道此标记的 class 并相应地呈现路线。
当我试图找到 $('object') 时,我一无所获。
我尝试了其他几个可用的选项,但没有成功。
我的索引路线目前正在加载主页路线,但我想根据对象标签上可用的 class 加载路线。
下面是我的index.js
import Ember from 'ember';
export default Ember.Route.extend({
beforeModel() {
console.log(this);
this.replaceWith('rentals');
}
});
我的 jsp 有这个代码片段,以便添加我想要的 ember 应用程序
var url = "../../rdm/ember/dist/index.html";
if(page == "user")
{
$(".ui-layout-center").html( '<object type="text/html" class="user"></object>');
$("object").attr('data',url);
mdmCurrentRequestObj = $(".ui-layout-center object");
}
else
{
$(".ui-layout-center").html( '<object type="text/html" class="userprofile"></object>');
$("object").attr('data',url);
mdmCurrentRequestObj = $(".ui-layout-center object");
}
据我所知,你应该可以正常使用JQuery。可能还有其他问题。我认为这个问题与 Ember.
没有任何关系要尝试的事情:
- 您是说使用三等号吗?
page === "user"
单个 equals 可能会导致奇怪的事情。 - 如果您查看 Chrome Inspector ,请在 DOM 中查找对象标签
- 当 DOM 准备就绪时,确保插入对象的代码是 运行
- 执行一些控制台日志记录以查看是否真的找不到对象,或者属性设置只是失败
- 尝试包括内联数据属性,例如
<object type="text/html" class="user" data=${data}></object>
(将字符串用反引号而不是引号括起来) - 确认
ui-layout-center
作为 class 存在(例如不是 id) - 创建一个最小示例,将任何其他类型的元素插入 DOM,然后尝试设置属性。例如,尝试插入一个带有ID的div,然后查找
一旦您成功从 DOM 获取对象,您可能需要查询和修改对象本身的内容。其语法类似于:
$('#some-object').contents().find('.some-element').text("some text")
只是为了那些用谷歌搜索它并搜索这个答案的人,当你的元素在 DOM 之外时,你需要获取它然后进行更改。我为获取元素所做的工作如下
Ember.$(window.self.top.document).find('object').hasClass("user")
而且效果很好。