Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MeteorJS-在实现发布/订阅和方法/调用后未更新列表项_Meteor_Methods_Publish_Subscribe - Fatal编程技术网

MeteorJS-在实现发布/订阅和方法/调用后未更新列表项

MeteorJS-在实现发布/订阅和方法/调用后未更新列表项,meteor,methods,publish,subscribe,Meteor,Methods,Publish,Subscribe,好吧,这有点奇怪 我在服务器端得到了这些方法 Meteor.publish('todos', function () { return Todos.find({userId: this.userId},{sort:{createdAt:-1}}); }); Meteor.methods({ editTodo: function(todoId) { Todos.update(todoId, {$set: {checked: !this.checked}}); }

好吧,这有点奇怪

我在服务器端得到了这些方法

Meteor.publish('todos', function () {
return Todos.find({userId: this.userId},{sort:{createdAt:-1}});
});

Meteor.methods({
    editTodo: function(todoId) {
        Todos.update(todoId, {$set: {checked: !this.checked}});
    }
});
这是客户端的调用

Template.list.helpers({
    todos: function(){
        Meteor.subscribe('todos');
        return Todos.find({});
    }
});
Template.list.events({
    "click .toggle-check": function(){
        Meteor.call('editTodo',this._id);
    }});
问题是当点击“.toggle check”时。。。“选中”布尔值被触发,但从未关闭。。。。this.checked(在{checked:!this.checked}中)是否未引用立即从集合中读取的字段? 或者我在订阅数据时实现了一些错误


请帮忙

我认为问题与您建议的订阅注册有关-更具体地说,您的
Meteor.subscribe()
是从
模板.helpers
函数中调用的

尝试将订阅移动到早期页面或模板事件,例如
template.body.onCreated()
template.list.onCreated()
(取决于您的要求)


Meteor文档中有一个很好的例子:(参见第10.3节)。

在您的方法中,“this.checked”是否解决了正确的问题?这看起来很奇怪。它在视图上呈现,因为我正在将选中状态呈现到复选框中。似乎正在发生的事情(经过进一步调查)是更新没有发生。什么是错过了这是我有一个完整的积垢在这里工作选择,插入,删除所有工作罚款更新似乎不能正常工作。进一步检查后,我注意到,当我点击更新按钮时,我在控制台中检索并显示了行(通过服务器端),checked总是设置为true,但从不变为false。所以这项检查基本上不起作用。也不允许/拒绝!是的,我是说“这”可能不是你在那种情况下所想的。至少,我从未见过它被这样使用过。我将继续调试“this”的用法。只是为了记录在案这确实是指来自记录本身的检查值。ok cool。我从来没见过。现在我不在电脑前,但我会接受你的建议,并随时通知你。所以你认为这是因为延迟?如果我将所有订阅重新定位到Meteor.startup(),您认为这会解决问题吗?我相信这是正确的(对于这两个问题:),最后,我将我的
Meteor.subscribe()
调用重新定位到
Template.body.onRendered(function(){})中
\imports\startup\client\index.js中,虽然订阅不应该在帮助程序中(我会将其移动到onCreated()),但我认为这不是问题所在。在该助手中,find()仍然应该是被动的。没有必要每次Blaze决定给那个助手打电话的时候就一直点击那个订阅。一次就够了。