【问题标题】:How to initialize a jQuery object once the layout has rendered?布局渲染后如何初始化 jQuery 对象?
【发布时间】:2015-12-09 14:20:00
【问题描述】:

我想定义一些变量,以便稍后在我的应用布局被渲染后用于确定我的 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 对象?

【问题讨论】:

  • 当时我没有意识到 layout 被视为另一个模板。非常感谢您的帮助!
  • 如果您需要在执行任何 JQuery 操作之前保证 DOM 元素存在,这个问题和我的回答可能会很有趣。 stackoverflow.com/questions/32461639/…
  • @KassymDorsel 是的,它非常接近,但主题不同(#each 的迭代),它在这里不太适用。

标签: javascript jquery meteor


【解决方案1】:

layout 只是另一个模板。 jQuery 需要 DOM 元素存在才能从中创建对象。

从那里onRendered callback 是要走的路:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多