在我的应用程序中,sections
是一个courses
由称为的属性链接的集合course.sectionIds
。初始加载工作正常,但是在管理面板中添加部分时,我遇到了非反应式联接问题。
这是路线:
@route 'adminCourse',
path: 'admin/course/:course'
waitOn: -> Meteor.subscribe 'course', @params.course
data: -> Course.first()
这些部分包含在课程出版物中:
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 ]
我知道反应式联接,但是我不能真正使用方法1或方法4(在客户端过度发布和联接),因为其中涉及权限检查(您只能看到自己课程的各个部分)。另外,我知道数据何时更改,因此它实际上并不一定是被动的。
我只想让Meteor知道在用户提交用于添加新部分的表单时重新加载数据(我目前正在通过window.location.reload()
添加部分后进行操作来解决此问题)。有没有办法用流星做到这一点?
事实证明,这确实很简单,现在我有点愚蠢了:)
您只需Meteor.subscribe()
再次调用即可重新加载订阅。我发现这是在搞乱其他解决方案时发现的,它使用铁路由器导航到其他URL,从而重新加载了订阅。
因此,在我的提交侦听器中window.reload()
,您无需执行以下操作,就可以执行以下操作:
Template.sectionForm.events
'submit form': ( e ) ->
e.preventDefault()
data = SimpleForm.processForm( event.target )
section = Section.create( data )
this.course.push( sectionIds: section._id )
# Reload the subscription to pull in the new section
params = Router.current().params
Meteor.subscribe 'course', params.producer, params.course
并且它将提取新数据。好极了!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句