待办事项列表不会显示我通过过滤器运行的集合中的数据

时间:2015-12-29 09:19:31

标签: javascript mongodb meteor spacebars meteor-helper

这是我的代码(我不知道两天的错误在哪里。)。当我把.task和.Done助手放在一起时,它就不再显示模板了。我知道我在某个地方有错误,但我已经两天不能指出它了。我想要的是从数据库中提取任务通过过滤器运行它们。提前感谢您的帮助。

<template name="Done">
    <li>
      <div>
        <span class="text">{{title}}</span>
      </div>
   </li>
</template>

<template name="task">
    <li>
    <button class="completed">Completed</button>
    <!--<li><input type="text" name="task" class="edit"></li>!-->
    <span class="text" onclick="true">{{title}}</span>
    <button class="saveItem">Save</button><button class="cancelItem">Cancel</button>
    <button class="editItem">Edit</button><button class="delete">Delete</button>
</li>

<div>
    <h1>To do list</h1>
        <ul>
            {{#each tasks}}
                {{>task}}
            {{/each}}
        </ul>
</div>

<div>
    <h1>Done list</h1>
        <ul>
            {{#each tasks}}
                {{>Done}}
            {{/each}}
        </ul>
</div>

.js文件

 Meteor.subscribe("tasks");

 Template.body.helpers({
    tasks: function(){
      return Tasks.find();
  }});

    Template.Done.helpers({
taskDone: function () {
  return Tasks.find({}, {fields: {completed: "yes"}});
    }
  });

  Template.task.helpers({
    taskNotDone: function(){
  return Tasks.find({completed: "no"});
    }
  });

  Meteor.publish("tasks", function () {
   return Tasks.find({});
    });

1 个答案:

答案 0 :(得分:1)

首先,我强烈建议将completed字段存储为布尔值而不是字符串值。其次,辅助函数taskDonetaskNotDone应属于body模板。此外,fields修饰符通常用于限制publishing的某些字段,而不是用于查询文档。

例如,如果要发布所有任务,减去completed信息,发布功能将如下所示:

Meteor.publish("tasks", function () {
  return Tasks.find({}, {fields: {completed: 0}});
});

相反,如果您只想返回已完成的Tasks个文档,您将获得以下查询:

Tasks.find({completed: true});

此代码可能会解决您的问题:

<body>
  <div>
    <h1>To do list</h1>
    <ul>
      {{#each tasksToDo}} 
        {{>task}} 
      {{/each}}
    </ul>
  </div>

  <div>
    <h1>Done list</h1>
    <ul>
      {{#each taskDone}} 
        {{>done}} 
      {{/each}}
    </ul>
  </div>
</body>

<template name="done">
  <li>
    <div>
      <span class="text">{{title}}</span>
    </div>
  </li>
</template>

<template name="task">
  <li>
    <button class="completed">Completed</button>
    <span class="text" onclick="true">{{title}}</span>
    <button class="saveItem">Save</button>
    <button class="cancelItem">Cancel</button>
    <button class="editItem">Edit</button>
    <button class="delete">Delete</button>
  </li>
</template>
if (Meteor.isClient) {
  Template.body.helpers({
    tasksToDo: function() {
      return Tasks.find({
        completed: false
      });
    },
    taskDone: function() {
      return Tasks.find({
        completed: true
      });
    }
  });
}

这是MeteorPad