我遍历数据库中元素的模板不起作用?

时间:2013-11-14 22:25:51

标签: debugging meteor

相关模板部分如下:

<template name="list_of_links">
   <ul id="item-list">
        {{#each my_playlist}}
            {{> link_item}}
        {{/each}}
    </ul>
</template>

<template name="link_item">
<li class="link">
    <div class="destroy"></div>
    <div class="link-title">{{youtube_link}}</div>
</li>
</template>

客户端中的相关Javascript是:

  //Songs from session
    Template.list_of_links.my_playlist = function () {
      return Links.find({sess: Meteor.default_connection._lastSessionId}, {sort: {score: -1}});
    };

但是,每当我通过文本输入将内容插入到Links集合中时,我都看不到页面上有任何更新内容。

当我打印到手动记录时,我能够看到db中的值,然后调用:Template.list_of_links.my_playlist()确实给了我想要的输出。

另外,youtube_link是Links集合中的一个字段,我不确定我在link_item模板中使用它的方式。

2 个答案:

答案 0 :(得分:1)

如果你摆脱下面的位,会发生什么?这完全没必要。

Template.link_item.youtube_link = function () {
    return this.youtube_link;
};

不起作用的原因是因为模板助手中的this不是实际的数据位。来自Meteor docs

  

模板实例对象在创建,呈现和销毁的模板回调中作为this的值被找到,并作为事件处理程序的参数。

答案 1 :(得分:0)

{{youtube_link}}模板中的

link_item不会返回任何内容,因为它是从数据库传递值的list_of_links模板。所以我猜你的DOM实际更新了,只是它是一个空的附加,如下:

<li class="link">
    <div class="destroy"></div>
    <div class="link-title"></div>
</li>

因此,您需要向youtube_link模板添加link_item - 帮助器,并从那里返回您想要的值。

(我不记得我的想法,但我认为你可以这样做):

Template.link_item.youtube_link = function () {
  return this.youtube_link;
};