- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我在浏览器中访问路线时,我希望 Iron Router 在加载路线之前调用 onBeforeAction 一次。但看起来它在第一次加载路线时被调用了 3 次。
这对我来说是个问题,因为如果用户无权访问该文档,我想放置重定向用户的代码。
onBeforeAction: ->
console.log 'called once' #Called 3 times when first loading the route!
thread = Research.findOne(@params._id)
console.log thread # This is undefined at first run
thread = Research.findOne(@params._id)
if thread?
Meteor.subscribe 'collabUsers', @params._id
else
Router.go '/research'
appendUserData = (array) ->
_.each array, (item) ->
user = Meteor.users.findOne(item.userId)
if user?.profile.firstName? && user?.profile.lastName?
item.firstName = user.profile.firstName
item.lastName = user.profile.lastName
item.username = user.username
userEnabled = () ->
if Meteor.user()
if $(window).width() > 768
if !$('.show-left').hasClass 'active'
Meteor.defer ->
$('.show-left').click()
requireLogin = (pause) ->
if !Meteor.user()
@setLayout 'layoutLoggedOut'
if Meteor.loggingIn()
@render @loadingTemplate
else
@render 'login'
pause()
else
@setLayout 'layout'
if window.location.pathname is '/' or undefined
Router.go('addAndSearchPosts')
else
Router.go(window.location.pathname)
Router.configure
layoutTemplate: 'layout'
loadingTemplate: 'loading'
onBeforeAction: ->
#this code get which ids we need to get data from to render template. Here we need to get data to notification of collab
params = {}
params.threadIds = []
params.userIds = []
notifications = Notifications.find {userId: Meteor.userId()}
notifications.forEach (notification) ->
params.threadIds.push notification.threadId
params.userIds.push notification.requesterId
@subscribe('notificationDataCollab', params).wait()
waitOn: ->
[
Meteor.subscribe 'myResearch', Meteor.userId()
Meteor.subscribe "notifications"
]
Router.onAfterAction userEnabled
Router.onBeforeAction requireLogin,
except: 'template1'
Router.onBeforeAction 'loading'
Router.onBeforeAction ->
Errors.clearSeen()
Router.map ->
@route 'posts_page',
path: '/posts',
@route 'template1',
path: '/template1',
@route 'login',
path: '/',
@route 'addAndSearchPosts',
path: '/bookmarks',
waitOn: ->
Meteor.subscribe 'myBookmarks', Meteor.userId()
data: ->
bookmarks: Bookmarks.find
_userId: Meteor.userId()
@route 'research',
path: '/research/:_id',
waitOn: ->
[
Meteor.subscribe 'threadNotes', @params._id, Meteor.userId()
Meteor.subscribe 'collabUsers', @params._id
]
onBeforeAction: ->
console.log 'called once'
#Meteor.subscribe 'collabUsers', @params._id
# thread = Research.findOne(@params._id)
# console.log thread
#thread = Research.findOne(@params._id)
# if thread?
# Meteor.subscribe 'collabUsers', @params._id
# else
# Router.go '/research'
#Errors.throw('Thread does not exist or you do not have access', false)
data: ->
# this code is for appending the user data to pending and current collaborators for this thread
thread = Research.findOne(@params._id)
if thread?.pending?.collaborators?.length > 0
appendUserData(thread.pending.collaborators)
if thread?.collaborators?.length > 0
appendUserData(thread.collaborators)
data =
researchThread: thread,
notes: Notes.find
_threadId: @params._id
,
sort:
date: -1
data
@route 'researchHome',
path: '/research'
@route 'profileEdit',
path: '/editprofile'
Meteor.publish 'myResearch', (id) ->
Research.find({$or: [{_userId: id}, {'collaborators.userId': id}] })
Meteor.publish 'threadNotes', (threadId) ->
Notes.find({_threadId: threadId})
Meteor.publish 'myBookmarks', (userId) ->
Bookmarks.find({_userId: userId})
Meteor.publish 'collabUsers', (threadId) ->
Meteor.users.find({}, {fields: {profile: 1, username: 1}})
Meteor.publish 'notifications', ->
Notifications.find()
Meteor.publish 'notificationDataCollab', (params) ->
[
Meteor.users.find({_id: {$in: params.userIds}}, {fields: {username: 1}})
Research.find({_id: {$in: params.threadIds}}, {fields: {name: 1}})
]
最佳答案
onBeforeAction
react 性地运行和重新运行。您可能想要 onRun
.
关于Meteor:为什么 Iron Router 的 onBeforeAction 会被多次调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099549/
我有一个带有帮助程序的页面,该帮助程序依赖于在使用 onBeforeAction 进行路由时设置的 id_sell 变量。当前的问题是助手在设置变量之前运行。 this.route('/chat_id
我在尝试添加 pdf 文件生成时看到奇怪的行为。 以下代码在 if 语句中抛出:两个\routes.js Router.onBeforeAction(function () { if (!Mete
我有一个用于 Facebook 共享的服务器端路由(因为现在它需要 URL) this.route('share',{ path: '/share', where: 'server'
我看到旧的帖子,其中旧版本的 Iron-router 在之前执行 wait(): before: function() { // let's make sure that the topP
我有以下路由配置:https://gist.github.com/chriswessels/76a64c421170095eb871 尝试加载路线时出现以下错误: Exception in defer
我想在请求的艺术家不可用时设置一个 Session 变量 (artistNotAvailable)。不幸的是,该路由不起作用,因为它没有在我的 onBeforeAction Hook 中等待订阅数据。
我的 meteor 应用程序出现问题,我不知道为什么。 我的 meteor 版本是 1.1.0.3,这是我的软件包列表: accounts-password 1.1.1 Passwor
我现在正在 Meteor 中执行注销功能,我注意到一些奇怪的事情。当我在登录页面上时,甚至在注销并重定向到登录页面时,我的 Google 控制台上会出现错误: 路由调度从未呈现。您是否忘记在 onBe
当我在浏览器中访问路线时,我希望 Iron Router 在加载路线之前调用 onBeforeAction 一次。但看起来它在第一次加载路线时被调用了 3 次。 这对我来说是个问题,因为如果用户无权访
我决定在 Meteor 的页面之间实现一个快速的小动画。我决定执行此操作的方法是使用 onBeforeAction Hook ,将 DOM 元素设置为 display:none,然后使用 onAfte
我有以下路由器映射代码: this.route('confirmTag', { path: '/confirm-tag', template: 'confirmTag', co
我有一个与 meteor.js 同步的 onBeforeAction 方法 Router.onBeforeAction(function() { var self; self = th
我有 Meteor Roles 包,我正在尝试定义管理路由: var requireLogin = function() { if (! Meteor.user()) { debugger
在我将其更新到 Meteor 1.3 之前,我的应用程序一直在运行。现在我得到这个错误: Exception in callback of async function: Error: Handler
我想创建一个预加载脚本来执行许多异步函数来下载外部内容。我在这里非常接近,但我还没有完全弄清楚如何在我的 onBeforeAction 函数中推迟调用 this.next() 。在下面的代码中,您可以
我使用以下函数作为我的 onBeforeAction Hook 的助手: var gameFilter = function () { this.subscribe('singleGame',
我是一名优秀的程序员,十分优秀!