在Meteor中,我收到了客户订阅的集合.在某些情况下,我想发送一些虚假数据,而不是发布服务器上集合中存在的文档.现在,使用this.added发布中的函数很好.
我的问题是我想把伪造的doc当作真实的文档,特别是当我想要更新它时会遇到麻烦.对于我运行的真实文档,RealDocs.update但是当在虚假文档上执行此操作时,它会失败,因为服务器上没有它的表示(我想保持这种方式).
允许我传递这样的东西的集合API local = true会很棒,但我不知道实现起来有多困难,我不喜欢修改核心代码.
现在,我被困在任创建BogusDocs = new Meteor.Collection(null),但使填充收集比较困难,因为我必须在客户端代码,通过硬编码器具或使用方法来从服务器获取数据,我必须确保我打电话BogusDocs.update,而不是的RealDocs.update,只要我负责的虚假数据.
也许我实际上可以在服务器上插入数据并确保它稍后被删除,但数据实际上与服务器端集合无关,所以我宁愿避免这样做.
有关如何解决这个问题的任何想法?
dat*_*arl 19
经过一些进一步的调查(即兴思想网站)后,人们可以在不调用服务器的情况下修改本地集合.这是通过运行与通常相同的方法来完成的,MyCollection._collection而不仅仅是在Collection上.MyCollection.update()因此会变成MyCollection._collection.update().因此,使用一个简单的包装器,可以将通常的参数传递给更新调用,以便像往常一样更新集合(它将尝试调用服务器,而服务器又会触发允许/拒绝规则),或者我们可以添加'local'为最后一个参数仅在客户端集合中执行更新.这样的事情应该做到这一点.
DocsUpdateWrapper = function() {
var lastIndex = arguments.length -1;
if (arguments[lastIndex] === 'local') {
Docs._collection.update(arguments.slice(0, lastIndex);
} else {
Docs.update(arguments)
}
}
Run Code Online (Sandbox Code Playgroud)
(这当然可以扩展到允许插入和删除的DocsWrapper.)(没有尝试过这个功能,但它应该作为一个例子.)
这样做的最大好处是,我们可以使用完全相同的调用从本地集合中检索文档,无论它们是本地还是生活在服务器上.通过向doc添加一个简单的布尔值,我们可以跟踪哪些文档只是本地的,哪些不是(改进的DocsWrapper可以检查bool,所以我们甚至可以省略传递'local'参数.)所以我们知道如何更新他们.
| 归档时间: |
|
| 查看次数: |
2689 次 |
| 最近记录: |