Метеор не добавляет и не отображает задачи на веб-странице, он просто мигает и работает неправильно (для создания списка Todos для добавления и удаления задач) - PullRequest
0 голосов
/ 19 мая 2018

// Код на стороне клиента в client \ main.js

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

Template.tasks.helpers({
    tasks:function () {
        return Tasks.find({},{sort:{createdAt:-1}});
    }
});

Template.tasks.events({
    "submit .add-task":function (event) {
        var name = event.target.name.value;

        Meteor.call('addTask',name);
        event.target.name.value='';

        return false;
    },
    "click .delete-task":function (event) {
        if(confirm('Delete Task?')){
            Meteor.call('deleteTask',this._id);
        }
        return false;
    }
});

Meteor.methods({
    addTask: function (name) {
        if (!Meteor.userId()) {
            throw new Meteor.Error('No Access!!');

        }
        Tasks.insert({
            name: name,
            createdAt: new Date(),
            userId: Meteor.userId()
        });
    },
    deleteTask: function(taskId) {
        Tasks.remove(taskId);
    }
});

// Код на стороне сервера вserver \ main.js

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



Meteor.methods({
    addTask: function (name) {
        if (!Meteor.userId()) {
            throw new Meteor.Error('No Access!!');

        }
        Tasks.insert({
            name: name,
            createdAt: new Date(),
            userId: Meteor.userId()
        });
    },
    deleteTask: function taskId() {
        Tasks.remove(taskId);
    }
});

// Html page

<head>
  <title>tasklist</title>
</head>

<body>

  {{> tasks}}
</body>

<template name="tasks">
    {{> loginButtons}}
    <h1>Add Task</h1>
    {{#if currentUser}}
    <form class="add-task">
        <label>Task Name</label>
        <input type="text" name="name" placeholder="Add Task" />
        <input type="submit" value="Submit" />
    </form>
        {{else}}
        <p>Please log in to add tasks</p>
        {{/if}}
<hr />
    <h3>Tasks</h3>
<ul>
    {{#each tasks}}
        <li>{{name}}{{#if currentUser}} <a href="#" class="delete-task">X</a>{{/if}} </li>
        {{/each}}
</ul>
</template>

Пожалуйста, помогите, в этом, когда я перезагружаю страницу, она сначала добавляет и показывает на веб-страницеи если я удаляю попытку удалить добавленное, то на экране не отображаются даже добавленные задачи, которые находятся в MongoDB.И когда я делаю консоль, появляется пустой массив добавленных задач

1 Ответ

0 голосов
/ 19 мая 2018

Если он «мигает», это часто означает, что ваш метод работал на стороне клиента, а не на стороне сервера.Вставка работала на вашем Minimongo (клиент), но не на реальном MongoDB (сервер).Поэтому Метеор решает откатить вашу вставку на Minimongo.

У вас должна быть проблема на стороне вашего сервера Метода: вы не можете использовать Meteor.userId() сторону сервера в своих Методах, вы должны использовать this.userId.Чтобы избежать ошибок, используйте this.userId только внутри клиентской или серверной части Meteor Methods.

// Server side
Meteor.methods({
    addTask: function (name) {
        if (!this.userId) {
            throw new Meteor.Error('No Access!!');

        }
        Tasks.insert({
            name: name,
            createdAt: new Date(),
            userId: this.userId
        });
    },
    deleteTask: function taskId() {
        Tasks.remove(taskId);
    }
});

В Meteor вам не нужно дублировать свою клиентскую и серверную часть Methods.

Методы всегда должны быть определены в общем коде, загруженном на клиенте и на сервере, чтобы включить Optimistic UI.

Вы просто должны определить свои Методы и свою коллекцию один раз в папке, загруженной на клиент и сервер.Например, вы можете поместить свой код в папку с именем both/.

...