插入 Meteor 集合时遇到错误

7

我开始使用Meteor,并且遇到了我的第一个问题。我正在尝试将一个项插入到我的集合中。我得到了以下控制台日志错误。有人能帮助一个Meteor新手吗?

插入失败:找不到方法

这是导致错误的行:

Videos.insert({name: el.value});

我的js文件:

var Videos = new Meteor.Collection("videos");

if (Meteor.isClient) {
  Template.videoList.video = function() {
    return Videos.find();
  }

  Template.videoForm.events({
    'click button': function(e, t){
      var el = t.find("#name");
      Videos.insert({name: el.value});
      el.value = "";
    }
  });
}

1
在服务器端也可以访问 var Videos = new Meteor.Collection("videos") 吗? - Tarang
是的,就是这样。我的收藏只在客户端上。谢谢! - zero
@Tarang,你应该将你的评论发布为答案,这样Zero就可以接受它了。 - Boggin
2个回答

12
当您尝试使用Video.insert时,Meteor会同时在客户端和服务器上进行插入。Meteor以此方式设计是为了帮助在客户端上立即反映更改(延迟补偿)。
如果您的Video集合未在服务器上定义(Meteor.isServer包装或可由服务器访问的文件中不存在),将抛出您遇到的错误。
如果您想仅向客户端插入,可以通过_collection访问它。因此,您的插入语句将是Videos._collection.insert(values)。
您可以在此屏幕录制中找到更多信息:http://www.eventedmind.com/feed/meteor-anatomy-of-a-collection-insert

一直都是这样吗?我的意思是,Collection.insert 会尝试在服务器和客户端插入数据,即使它是一个客户端集合? - Mascarpone
1
如果集合只存在于客户端,则不会对服务器发出调用。 - Bozhao

6
创建本地集合的方法如下:

MyLocalCollection = new Collection(null);

(参考文献见 这里)。需要注意的是,_collection 是一个未经记录的属性,在很多情况下表现得很奇怪,因此最好不要使用它。如果希望仅操作客户端-服务器集合的本地缓存,直接进行操作是不可能的。但是,非常容易创建一个现有集合的动态本地镜像(在我的经验中,这是处理任何复杂 UI 的正确方式)。详情请查看此文章

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接