gpt4 book ai didi

meteor - 如何强制Meteor重新加载订阅?

转载 作者:行者123 更新时间:2023-12-04 13:16:26 25 4
gpt4 key购买 nike

在我的应用程序中,sections是一个通过称为courses的属性链接到course.sectionIds的集合。初始加载工作正常,但是在管理面板中添加部分时,我遇到了非响应式(Reactive)联接问题。

这是路线:

@route 'adminCourse',
path: 'admin/course/:course'
waitOn: -> Meteor.subscribe 'course', @params.course
data: -> Course.first()

这些部分包含在类(class)出版物中:

Meteor.publish 'course', ( courseId ) ->
return null if not this.userId

# [some permission checks]

courses = Course.find courseId
sections = Section.find _id: $in: _.flatten courses.map ( course ) -> course.sectionIds

[ courses, sections ]

我知道 reactive joins,但是我真的不能使用方法1或方法4(在客户端过度发布和加入),因为其中涉及权限检查(您只能看到自己类(class)的各个部分)。另外,我知道数据何时更改,因此它实际上并不一定是被动的。

我只想让Meteor知道在用户提交用于添加新节的表单时重新加载数据(我目前正在通过在添加节后执行 window.location.reload()来解决此问题)。有没有办法用 meteor 做到这一点?

最佳答案

对于感兴趣的人,我通过在publish函数中添加observeChanges来解决此问题:

Meteor.publish 'course', ( courseId ) ->
return null if not this.userId

# [some permission checks]

courses = Course.find courseId
sectionIds = _.flatten courses.map ( course ) -> course.sectionIds

handle = courses.observeChanges
changed: ( id, fields ) =>
if _.has fields, 'sectionIds'
addedIds = _.difference fields.sectionIds, sectionIds
removedIds = _.difference sectionIds, fields.sectionIds
sectionIds = fields.sectionIds

_.each addedIds, ( id ) => @added 'sections', id, Section.first id
_.each removedIds, ( id ) => @removed 'sections', id

@onStop -> handle.stop()

sections = Section.find _id: $in: sectionIds

[ courses, sections ]

观察者检查 sectionIds属性中的更改,并在发生更改时在订阅上调用 addedremoved方法。这使联接成为 react 性;在 courses.sectionIds属性中添加ID时,新的部分文档现在会自动推送到客户端。

关于meteor - 如何强制Meteor重新加载订阅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26096877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com