2015-09-13 30 views
4

我想定义一些变量,用于在我的应用程序布局渲染完成后立即确定我的jQuery选择器的范围。如何在布局渲染后初始化jQuery对象?

我试图用定义它们:

Meteor.startup(function() { /* Define variables */ }) 

但它没有工作,对象是空

这里是我声明我的应用程序布局:

Router.configure({ 
    layoutTemplate: 'layout' 
}); 

这里版面本身:

<template name="layout"> 
    <div id="page_container"> 
    <header id="page_header"> 
    </header> 

    <div id="page_content"> 
     {{> yield}} 
    </div> 
    </div> 
</template> 

这里是我愿意声明变量:

L.BODY = $("body"); 
    L.PC = $("#page_content", L.BODY); 

本身工作正常的声明,但L.BODY显示我的应用程序的主体仍然是我试图声明这些变量的时间空。

一旦我的应用程序的布局已经呈现,我该如何定义jQuery对象?

+0

。 非常感谢您的帮助! –

+0

这个问题和我的答案可能是有趣的,如果你需要在做任何JQuery的东西之前保证DOM元素存在。 http://stackoverflow.com/questions/32461639/how-to-execute-a-callback-after-an-each-is-done/32470003 –

+0

@KassymDorsel是的,它是非常接近,但是在一个不同的主题(迭代'#each'),在这里并不适用。 –

回答

6

layout只是另一个模板。 jQuery需要存在的DOM元素来创建一个对象。

从那里onRendered callback是要走的路:我没有意识到`layout`被处理,就像接着又模板

Template.layout.onRendered(function() { 
    L.BODY = $('body'); 
    L.PC = $('#page_content', L.BODY); 
});