【发布时间】:2014-01-07 04:35:51
【问题描述】:
我正在使用 Meteor 和 Iron Router 构建一个网络应用程序,我的目标之一是为登录的用户构建一个配置文件视图(他可以在其中编辑他的信息)和所有用户的配置文件视图(其中任何人都可以查看)。
登录用户的个人资料视图运行良好,但我在为其他用户创建用户个人资料视图时遇到问题。当我尝试直接在浏览器中使用 url (eg: localhost:3000/users/"id") 访问某些用户配置文件时,它会呈现登录用户的数据,并且浏览器中的 url 更改为 localhost:3000/users/[object%20Object]。
此外,当呈现包含该信息的页面时,引用 的标记始终为空。
这里是与这个问题相关的代码:
服务器 - publications.js
Meteor.publish('singleUser', function(userId) {
return Meteor.users.find(userId);
});
路由器.js
Router.map(function() {
this.route('profile', {
path:'/profile',
data: function() {return Meteor.user();}
});
this.route('user_profile', {
path: '/users/:_id',
waitOn: function() {
return Meteor.subscribe('singleUser', this.params._id);
},
data: function() {
var findById = Meteor.users.findOne(this.params._id);
if (typeof findById !== "undefined") {
Router.go(getProfileUrlById(findById), {replaceState: true});
}
}
});
});
用户配置文件模板
<template name="user_profile">
<h4>Username</h4>
<p>{{username}}</p>
<h4>Email:</h4>
<p>{{email}}</p>
</template>
用户配置文件助手
Template.user_profile.helpers({
username: function() {return Meteor.user().username},
email: function() {return Meteor.user().emails[0].address}
});
项目模板
<template name="item">
</span> <a href="{{profileUrl}}">{{author}}</a>
</template>
物品助手
Template.item.helpers({
profileUrl: function() {
var user = Meteor.users.findOne(this.userId, {reactive:false});
if(user)
return getProfileUrlById(user);
}
});
getProfileUrlById = function(id) {
return Meteor.absoluteUrl()+'users/' + id;
}
用户个人资料登录模板
<template name="profile">
<h4>Username</h4>
<p>{{username}}</p>
<h4>Email:</h4>
<p>{{email}}</p>
</template>
用户个人资料登录助手
Template.profile.helpers({
username: function() {return Meteor.user().username},
email: function() {return Meteor.user().emails[0].address}
});
我错过了什么吗?
提前致谢!
【问题讨论】:
标签: javascript meteor meteorite iron-router