流星onrender -访问DOM困难
Meteor onRendered - difficulty accessing DOM
我在流星中的模板onrender块中访问DOM时遇到了麻烦。下面是模板html的简化版本:
<template name="templateName">
{{#each thing}}
<img src="{{filename}}">
{{/each}}
</template>
下面是客户端JavaScript代码:
Template.templateName.onRendered(function() {
console.log('check');
this.$('img').each( function() {
console.log('hi');
});
});
我已经验证了代码正在运行,因为'check'出现在浏览器控制台中,但是尽管显示了几个图像,但没有打印'hi'。
如果有更好的替代方法,这里的目标是使用来自DOM的信息来调整图像的大小。确认,jquery包被添加到Meteor。
提前感谢您提供的任何帮助!我被这个看似简单的问题难住了好几个小时。
你不应该在你的onrender父模板中使用jQuery each
。相反,你可以这样做:
<template name="templateName">
{{#each thing}}
{{> imgTmpl}}
{{/each}}
</template>
<template name="imgTmpl">
<img src="{{filename}}">
</template>
js:
Template.templateName.onRendered(function() {
console.log('check');
});
Template.imgTmpl.onRendered(function() {
console.log('hi');
});
跟进:我试图得到(自然)的宽度和高度onrender函数中的图像,但它返回0,表示虽然模板已经渲染,但图像还没有加载。如何我能等图片加载吗?
完成@juliancwirko的回答,现在你有一个单独的模板来定义你的图像列表项,你可以使用流星事件映射监听img
标签上的加载事件。
Template.imgTmpl.events({
"load img": function(event, template){
console.log("image width :",this.$("img").prop("width"));
console.log("image height :",this.$("img").prop("height"));
}
});
我是这么做的:
Template.imgTmpl.events({
"load img": function(event){
console.log("width " + event.currentTarget.naturalWidth);
console.log("height " + event.currentTarget.naturalHeight);
}
});
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 在不使用JQuery的情况下隐藏DOM中的选定元素
- 如何在DOM元素上按类型构建此函数
- Windows形成web浏览器控件和Javascript更改的DOM
- Html引导程序警报自动关闭困难
- Datatables:通过DOM数据源中的名称引用列
- 在DOM中查找一个模式并替换它's的内容使用jquery
- DOM事件通过JSON转换为java
- 将DOM节点值与字符串Javascript进行比较
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- 流星中DOM的繁殖
- DOM元素和angular元素之间的主要区别是什么
- 当带有渲染器的DOM元素不在屏幕顶部时,移动了场景的坐标
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- PHP-如何重定向到同一页面并更改DOM's
- 为什么检查DOM元素比在控制台中使用jQuery ID选择器显示的东西更困难?
- 在 JavaScript 中使用 DOM 理解范围和变量时遇到困难
- 如何使用 DOM 和 JavaScript 在游戏的 3 个不同级别之间切换?例如,简单、中等和困难
- 流星onrender -访问DOM困难