流星 - 待办事项应用程序


在本章中,我们将学习如何创建一个简单的待办事项应用程序。

第 1 步 - 创建应用程序

打开命令提示符并运行以下命令 -

C:\Users\username\Desktop>meteor create todo-app

要查看该应用程序,您需要使用meteor命令运行该应用程序并转到http://localhost:3000

C:\Users\username\Desktop\todo-app>meteor

Step2 - 创建文件夹和文件

我们将重构它,而不是默认的文件结构。让我们创建一个client文件夹,我们将在其中创建todo-app.html、todo-app.csstodo-app.js

C:\Users\username\Desktop\todo-app>mkdir client
C:\Users\username\Desktop\todo-app\client>touch todo-app.html
C:\Users\username\Desktop\todo-app\client>touch todo-app.js

我们还将创建一个包含server.js 的服务器文件夹。

C:\Users\username\Desktop\todo-app>mkdir server
C:\Users\username\Desktop\todo-app\server>touch server.js

最后,让我们创建一个包含task-collection.js文件的集合文件夹。

C:\Users\username\Desktop\todo-app>mkdir server
C:\Users\username\Desktop\todo-app\collections>touch task-collection.js

您可以在下图中看到应用程序结构 -

Meteor Todo 应用程序结构

第 3 步 - client/todo-app.html

我们的第一个开发步骤是为应用程序创建 HTML。我们需要一个可以添加新任务的输入字段。任务将以列表的形式呈现,并具有删除检查功能。我们还将具有显示或隐藏已完成任务的功能。

<头>
   <title>待办事项应用程序</title>
</头>

<正文>
   <h1>待办事项列表 ({{incompleteCount}})</h1>

   <label class =“隐藏完成”>
      <输入类型=“复选框”选中=“{{hideCompleted}}”/>
      隐藏已完成的任务
   </标签>

   <form class =“新任务”>
      <input type = "text" name = "text" placeholder = "添加新任务" />
   </形式>

   <ul>
      {{#每个任务}}
         {{> 任务}}
      {{/每个}}
   </ul>
</正文>

<模板名称=“任务”>
   <li class = "{{#if selected}}checked{{/if}}">
      <按钮类=“删除”>x</按钮>
      <input type =“checkbox”checked =“{{checked}}”class =“toggle-checked”/>
      <span>{{用户名}} - {{文本}}</span>
   </li>
</模板>

第 4 步 - collections/task-collection.js

这是我们创建新 MongoDB 集合的地方,因此我们可以在服务器端和客户端上使用它。

Tasks = new Mongo.Collection("tasks");

第 5 步 - 服务器/server.js

我们将在服务器端为我们的应用程序定义方法。这些方法将从客户端调用。在此文件中,我们还将发布数据库查询。

// Publishing tasks from the server...

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

// Methods for handling MongoDb Tasks collection data...

Meteor.methods({

   addTask: function (text) {

      Tasks.insert({
         text: text,
         createdAt: new Date(),
      });
   },

   deleteTask: function (taskId) {
      var task = Tasks.findOne(taskId);
      Tasks.remove(taskId);
   },

   setChecked: function (taskId, setChecked) {
      var task = Tasks.findOne(taskId);
      Tasks.update(taskId, { $set: { checked: setChecked} });
   }
});

第 6 步 - client/todo-app.js

这是主要的客户端 JavaScript 文件。该文件也可以重构,但我们将在这里编写所有客户端代码。首先,我们订阅服务器上发布的任务集合。然后,我们创建帮助程序来处理应用程序逻辑,最后,我们定义将从服务器调用方法的事件。

// Subscribing to the published tasks
Meteor.subscribe("tasks");

// Show/Hide functionality
Template.body.helpers({

   tasks: function () {

      if (Session.get("hideCompleted")) {

         // If hide completed is checked, filter tasks
         return Tasks.find({checked: {$ne: true}}, {sort: {createdAt: -1}});
      } else {
         
         // Otherwise, return all of the tasks
         return Tasks.find({}, {sort: {createdAt: -1}});
      }
   },

   hideCompleted: function () {
      return Session.get("hideCompleted");
   },

   incompleteCount: function () {
      return Tasks.find({checked: {$ne: true}}).count();
   }
});

// Events for creating new tasks and Show/Hide functionality.
// Calling methods from the server

Template.body.events({

   "submit .new-task": function (event) {
      event.preventDefault();
      var text = event.target.text.value;

      Meteor.call("addTask", text);
      event.target.text.value = "";
   },

   "change .hide-completed input": function (event) {
      Session.set("hideCompleted", event.target.checked);
   }
});

// Events for Deleting and Check/Uncheck functionality
Template.task.events({
   
   "click .toggle-checked": function () {

      // Set the checked property to the opposite of its current value
      Meteor.call("setChecked", this._id, ! this.checked);
   },

   "click .delete": function () {
      Meteor.call("deleteTask", this._id);
   }
});

第 7 步 - 部署

完成开发后,我们可以从命令提示符窗口部署应用程序。我们的应用程序的部署名称将是my-first-todo-app

C:\Users\username\Desktop\todo-app>meteor deploy my-first-todo-app

我们可以打开http://my-first-todo-app.meteor.com/开始使用我们的应用程序。

Meteor Todo 应用程序部署