【问题标题】:Unable to display docs filtered by a single field无法显示按单个字段过滤的文档
【发布时间】:2013-11-17 11:11:57
【问题描述】:

使用文本输入,我将文档添加到 Collections 对象,每个对象都包含来自文本输入的文本,以及一个包含 Meteor.default_connection._lastSessionId 的 sess 参数,如下所示:Links.insert({sess:Meteor.default_connection._lastSessionId,youtube_link:url});

myapp.html,我有:

<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="link-title">{{youtube_link}}&nbsp;&nbsp;&nbsp;&nbsp;{{sess}}</div>
</li>
</template>

myapp.js

isClient下,我有:

   Meteor.subscribe("links");
    Template.list_of_links.my_playlist = function () {
      //return Links.find({sess: Meteor.default_connection._lastSessionId});
      return Links.find();
    };

isServer 下,我有:

Meteor.publish("links", function() {
    //return Links.find({sess:Meteor.default_connection._lastSessionId});
    return Links.find();
});

注意注释行。没有它们(就像现在一样),应用程序会在 #each 循环中打印数据库中的所有元素。使用现在注释的行(这是所需的行为),我希望能够在列表中显示当前浏览器会话中的元素,但是即使调用:Links.find({sess:Meteor.default_connection._lastSessionId}).fetch() 给我所需的输出我也看不到任何显示...

这是什么原因造成的,我应该解决这个问题吗?

【问题讨论】:

    标签: javascript meteor


    【解决方案1】:

    听起来至少有两个问题:

    1) 我认为 Meteor.default_connection 在服务器发布功能中不可用

    2) 一个光标,您可以在其中获取您期望的值,但将光标返回到模板不显示这些值听起来像一个错误。请记住,在获取值以检查它们并在模板中返回它们之间,您需要在该游标上调用 .rewind()

    要解决第一个问题,客户应该像这样订阅:

    Deps.autorun( function(){
      if ( Meteor.status().connected )
        Meteor.subscribe( "links", Meteor.default_connection._lastSessionId);
    });
    

    并像这样在服务器上发布:

    Meteor.publish("links", function( sess ) {
      return Links.find({sess: sess});  //each client will only have links with that _lastSessionId
    });
    

    那么你的模板助手就变成了:

    Template.list_of_links.my_playlist = function () {
      return Links.find();  //all links client has but client only has links with their _lastSessionId
    };
    

    我想知道这是否也能解决第二个问题,因为这将是一个令人惊讶的错误。

    --更新代码以向 Deps.autorun 添加反应变量。没有它,自动运行将只运行一次。基于评论here

    【讨论】:

    • 问题现在变成了元素被添加到集合中的瞬间,显示了瞬间的对象,然后它以某种方式删除了自己。
    • 听起来客户端的插入在服务器上被拒绝了。确保您在服务器上有一个allow function。如果不这样做,默认情况是在删除自动发布后拒绝所有客户端插入。
    • 更正上面的评论。它是一个“不安全”的包,允许客户端更新、插入和删除数据库中的文档。
    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2013-01-21
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2020-12-29
    • 2018-07-04
    相关资源
    最近更新 更多