【问题标题】:Collection can't get data in Template.mytemplate.rendered集合无法获取 Template.mytemplate.rendered 中的数据
【发布时间】:2013-03-27 10:07:55
【问题描述】:

我无法在 Template.my.rendered 中获取数据,但在 Chrome 的控制台中可以。 这是我的代码:

html:

<Template name="moitorContent">
  <div class="tab-pane active" id="1">
      ........
  </div>
</Template>

js:

Template.moitorContent.rendered = function(){ 如果(!this._rendered){ this._rendered = true; console.log(Svse.find({}).fetch()); } }

当使用 localhost:3000 打开 chrome 时,

控制台信息为“[]”

但在 chrome 的控制台中输入它们

console.log(Svse.find({}).fetch());

console.log 可以获取数据

像这样:

知道我做错了什么吗?

任何建议表示赞赏!

【问题讨论】:

  • 嗨,你想做什么?为此使用辅助方法怎么样?关于您的代码的注释: this._rendered 在 .rendered 回调中不是总是“true”吗?
  • 可能是你的 Svse 集合在第一次渲染时还没有准备好,尝试在你的 subscibe 中添加一个可选函数: Meteor.subscribe("Svse", function() {console.log("Svse Ready "});
  • @skeetmtp 是的,当调用渲染函数时,Svse 集合还没有准备好。你知道吗?
  • @Vindberg 我正在尝试在模板渲染时使用 jquery-TreeView 构建一棵树,而 !this._rendered 始终为真。

标签: meteor


【解决方案1】:

发生这种情况是因为您在订阅完成之前使用了 console.log:

如果是这种情况,您应该会发现使用它应该可以工作:

Template.moitorContent.rendered = function(){
    console.log(Svse.find({}).fetch());
}

要通过这个,您可以先检查那里是否有数据/或使用Session 变量来检查您的订阅是否完成。

Template.moitorContent.rendered = function(){
    if(!this._rendered && Svse.find({}).count()) {
      this._rendered = true;
      console.log(Svse.find({}).fetch());
    }
}

更简洁的方法是删除 autopublish 包并进行手动订阅和订阅。使用 Session 将订阅标记为已完成并检查您的 rendered 中的订阅是否已完成,并使用所有可用数据执行下一个任务。

【讨论】:

  • 感谢您的意见。是的,我已经删除了自动发布包并调用了 Meteor.subscribe。并且调用模板渲染函数时,集合还没有准备好。我不知道如何使用 Session 制作标志。Deps 类可以解决吗? Meteor 版本在我的应用中是 0.5.7。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-15
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
相关资源
最近更新 更多