【问题标题】:to do list won't show data from collection that i ran trough filter待办事项列表不会显示我通过过滤器运行的集合中的数据
【发布时间】:2016-04-03 03:48:35
【问题描述】:

这是我的代码(我已经两天不知道错误在哪里了。)。当我放置 .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({});
    });

【问题讨论】:

    标签: javascript mongodb meteor spacebars meteor-helper


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-19
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2017-07-04
      • 1970-01-01
      • 1970-01-01
      • 2013-10-02
      相关资源
      最近更新 更多