4

在 Meteor 文档中,它说Meteor.startup将在 DOM 和所有模板都被处理后调用。但是,我的代码Meteor.startup就像 DOM 元素不存在一样。

在 .js 中:

Meteor.startup(function () {
  console.log($('.draggable').length);
});

在 .html 中:

<template name="item">
  <div class="draggable ui-widget-content">
  </div>
</template>

在控制台中我看到:

0

但是在页面上我可以看到我的项目。事实上,如果我Template.item.rendered在事件中或mouseover事件中包含我的 JQuery,我会得到正确的数组长度。那么为什么该startup函数没有准备好使用我的 DOM 元素呢?

4

1 回答 1

5

我猜你的代码看起来像这样,但如果我错了请告诉我:

<template name="list">
  {{#each items}}
    {{> item}}
  {{/each}}
</template>

助手使用{{#each ...}}游标对象来响应游标上的数据更改。因此,在您的情况下,如果该数据来自服务器(例如订阅),则在 Meteor.startup 时,数据可能尚未加载。因此,最初您的列表将为空。然后,随着数据的传输,item将为每个数据项呈现一个新模板。如果你想让一个特定的项目可拖动,你可以把那个 jQuery 代码放在Template.item.rendered回调中。

这有帮助吗?

于 2013-03-16T01:48:54.487 回答