鉴于两个名为Foo的同一集合的出版物。 fooList应仅返回特定字段,但fooDetail应返回整个文档。
服务器:
Meteor.publish 'fooList', ->
return Foo.find(
{}
{ fields:
foo: true
'bar.bas': true
})
Meteor.publish 'fooDetail', (foo_id) ->
return Foo.find _id: foo_id
客户端:
Meteor.subscribe 'fooList'
Meteor.subscribe 'fooDetail', some_id
我希望在订阅fooDetail时获得完整的foo。 但是“bar”(嵌套文档)中的所有字段都不可用,除了“bar.bas”字段。
这是一个错误还是流星应该这样工作? (我目前正在使用Meteor 1.0.3.2和Iron-Router)
答案 0 :(得分:3)
这不是一个错误,它是流星known limitation的MergeBox。这是困扰大多数流星开发者一次的令人困惑的问题之一。
来自docs:
如果多个订阅发送字段的冲突值(相同的集合名称,文档ID和字段名称),则客户端上的值将是任意选择的已发布值之一。
您可以看到this post可能的解决方法。在您的示例中,可以修改您的发布,如下所示:
Meteor.publish 'fooList', ->
Foo.find {}, fields: foo: 1, bar: 1
这将发布所有顶级bar
字段,以避免冲突但在您的特定用例中可能无法接受。
答案 1 :(得分:0)
你的酒吧/潜水员看起来不错。我的猜测是你没有增加fooDetail
子的反应性。帮我一个忙:
waitOn
上,并将静态值传递给fooDetail
。Template.Instance().autorun