2015-07-19 61 views
0

我有分贝posts和所有的人都bollean flagged一个模板2个件事MeteorJS

我有一个模板,导航等(读,不要读)。

问题是,我看到的所有帖子(当我必须看到的帖子被标出虚假或标记真),我不明白为什么,我觉得问题在发布/订阅

Router.configure({ 
    layoutTemplate: 'layout', 
    loadingTemplate: 'loading', 
}); 

AllPostsController = RouteController.extend({ 
    template: 'timeTable', 
    waitOn: function() { 
     return Meteor.subscribe('allPosts'); 
    } 
}); 

readPostController = AllPostsController.extend({ 
    waitOn: function() { 
    return Meteor.subscribe('readPosts'); 
    } 
}); 

dontreaderPostController = AllPostsController.extend({ 
    waitOn: function() { 
    return Meteor.subscribe('dontreadPosts'); 
    } 
}); 


Router.map(function() { 
    this.route('timeTable', {path: '/', 
     controller: AllPostsController 
    }); 

    this.route('readPosts', {path: '/read', 
     controller: readPostsController 
    }); 

    this.route('dontreaderPosts', { 
     path: '/dontreader', 
     controller: dontreaderPostController 
    }); 
}); 

Meteor.publish('allPosts', function(){ 
    return Posts.find({},{ sort: { createdAt: -1 }}); 
}); 
Meteor.publish('readPosts', function(){ 
    return Posts.find({read:true},{ sort: { createdAt: -1 }}); 
}); 
Meteor.publish('dontreadPosts', function(){ 
    return Posts.find({read:false},{ sort: { createdAt: -1 }}); 
}); 

如果有人需要更多的代码,只是问我

人帮助

编辑:大卫解决的问题的常规任务。主要问题,我在我的主板上有特定的return Posts.find(...)

<template name="timeTable"> 
     {{#if posts_exist_week}} 
      {{> table posts=week}} 
     {{/if}} 
     {{#if posts_exist_month}} 
      {{> table posts=month}} 
     {{/if}} 
</template> 
<template name="table"> 
      <table class="main-table table"> 
       {{#each posts}} 
       {{> post}} 
       {{/each}} 
      </table> 
</template> 

你解决我的问题如果我没有模板timeTable(上周和本月该节目的帖子),因为这里模板帮手

Template.timeTable.helpers({ 
    week: function() { 
    //... 
    return Posts.find({createdAt: {$gte: weekstart, $lt: yesterday}},{ sort: { createdAt: -1 }}); //return posts that was created in this week 
    }, 
    month: function() { 
    //... 
    return Posts.find({createdAt: {$gte: monthstart, $lte: weekstart}},{ sort: { createdAt: -1 }}); 
    } 
}); 

现在你看,如果我选择你的决定(大卫)我会有 !! 返回

第一 - 在路由器 第二 - 在模板助手

+0

在你的关于失败的问题中始终要具体 - 这有助于我们缩小搜索范围。通过“不工作”你是什么意思?模板不显示?没有数据?你看到一个错误? –

+0

在dontreadposts我看到所有帖子,当我必须看到只有标记的帖子:false –

+0

您是否流星删除autopublish'?你有没有在你的路线以外的任何地方订阅?无论哪种方式,这是一个很好的例子,说明何时使用'data'钩子,或者只是您模板中的助手来限制当前上下文。 –

回答

0

我在本地重新创建这个发现extend使父控制器的waitOn运行。因此,无论何时您访问/read路线,实际上都会激活订阅,您将以客户端上的所有文档结束。一个简单的解决办法就是重构你的控制器,就像这样:

PostController = RouteController.extend({ 
    template: 'timeTable' 
}); 

AllPostsController = PostController.extend({ 
    waitOn: function() { 
    return Meteor.subscribe('allPosts'); 
    } 
}); 

readPostController = PostController.extend({ 
    waitOn: function() { 
    return Meteor.subscribe('readPosts'); 
    } 
}); 

dontreaderPostController = PostController.extend({ 
    waitOn: function() { 
    return Meteor.subscribe('dontreadPosts'); 
    } 
}); 

话虽这么说,你不想建立自己的应用程序,它额外时订阅碰巧被打破运行的方式。我会重写控制器以仅选择与它们相关的文档。例如:

dontreaderPostController = PostController.extend({ 
    waitOn: function() { 
    return Meteor.subscribe('dontreadPosts'); 
    }, 
    data: {selector: {read: false}} 
}); 

现在你的助手可以使用selector这样的:

Template.timeTable.helpers({ 
    week: function() { 
    var selector = _.clone(this.selector || {}); 
    selector.createdAt = {$gte: weekstart, $lt: yesterday}; 
    return Posts.find(selector, {sort: {createdAt: -1}}); 
    } 
}); 

还要注意的是,在发布功能排序可能没有用处 - 见common mistakes

+0

这很好,但我的问题是,它比我说的更diffucult,因为我有更多的代码,我把它添加到后编辑好吗? –

+0

我建议制作[流星垫](http://meteorpad.com/)并共享链接__或___,链接到代码的公共存储库。如果你阅读并理解了我的答案(特别是第一部分),并且你仍然需要更多帮助,那么我需要一个完整的工作版本来检查。看起来我的答案真的成了问题的核心 - 在请求更多帮助之前请仔细阅读。 –

+0

给出更多的代码,这就是为什么你解决它的50% –