MeteorJS, Flow Router - Uncaught TypeError: pathDef.replace is not a function
MeteorJS, Flow Router - Uncaught TypeError: pathDef.replace is not a function
我在 MeteorJS 中使用 Flow Router 时遇到 Uncaught TypeError: pathDef.replace is not a function
控制台错误。我是 Flow 的新手,之前使用过 Iron Router,所以可能做错了什么。
请注意,如果我先加载另一个页面然后导航到该页面,它工作正常,但如果我重新加载该页面,我会收到错误消息。
错误代码如下:
客户端模板
{{#if Template.subscriptionsReady}}
{{#each users}}
<tr>
<td>
{{linkNames profile.firstname profile.lastname}}
</td>
<td>
{{username}}
</td>
<td>
{{emails.[0].address}}
</td>
<td>
{{toUpperCase roles.[0]}}
</td>
<td>
{{getUsernameById createdBy}}
</td>
<td>
<a href="#" class="text-primary admin-edit-user" data-toggle="modal" data-target="#editUser" id="{{_id}}"><i class="fa fa-edit"></i></a>
</td>
<td>
<a href="#" class="text-danger admin-delete-user" id="delete{{_id}}"><i class="fa fa-times"></i></a>
</td>
</tr>
{{else}}
<tr>
<td colspan="6">
<p>There are no users</p>
</td>
</tr>
{{/each}}
{{else}}
<p>Loading...</p>
{{/if}}
酒吧
/* Users */
Meteor.publish('users', function() {
if (Roles.userIsInRole(this.userId, ['admin', 'team'])) {
return Meteor.users.find({}, {
fields: {
'profile.firstname': 1,
'profile.lastname': 1,
'emails': 1,
'username': 1,
'roles': 1,
'createdBy': 1
},
sort: {'roles': 1}
})
} else if (Roles.userIsInRole(this.userId, ['client'])) {
return Meteor.users.find({}, {
fields: {
'profile.firstname': 1,
'profile.lastname': 1,
'emails': 1,
'username': 1
}
});
}
});
客户端 JS
/* On created */
Template.users.onCreated(function() {
var instance = this;
instance.autorun(function() {
instance.users = function() {
instance.subscribe(Meteor.users.find({}));
}
});
});
/* Helpers */
Template.users.helpers({
users: function() {
var users = Meteor.users.find({});
return users;
}
});
我在以下全局帮助器的其他模板中也遇到错误 Exception in template helper: TypeError: Cannot read property 'username' of undefined
(尽管该帮助器按预期工作):
/* Current Username */
Template.registerHelper('currentUsername', function() {
return Meteor.user().username;
});
您的第一个错误可能是由于路由代码中的错误而导致的。确保您已在路由中定义参数并在任何路由代码中正确使用它们。
第二个错误是因为 Meteor.user() 不能保证总是立即定义。将您的助手更改为:
Template.registerHelper('currentUsername', function() {
var user = Meteor.user()
if( user ) {
return username;
}
});
我在 MeteorJS 中使用 Flow Router 时遇到 Uncaught TypeError: pathDef.replace is not a function
控制台错误。我是 Flow 的新手,之前使用过 Iron Router,所以可能做错了什么。
请注意,如果我先加载另一个页面然后导航到该页面,它工作正常,但如果我重新加载该页面,我会收到错误消息。
错误代码如下:
客户端模板
{{#if Template.subscriptionsReady}}
{{#each users}}
<tr>
<td>
{{linkNames profile.firstname profile.lastname}}
</td>
<td>
{{username}}
</td>
<td>
{{emails.[0].address}}
</td>
<td>
{{toUpperCase roles.[0]}}
</td>
<td>
{{getUsernameById createdBy}}
</td>
<td>
<a href="#" class="text-primary admin-edit-user" data-toggle="modal" data-target="#editUser" id="{{_id}}"><i class="fa fa-edit"></i></a>
</td>
<td>
<a href="#" class="text-danger admin-delete-user" id="delete{{_id}}"><i class="fa fa-times"></i></a>
</td>
</tr>
{{else}}
<tr>
<td colspan="6">
<p>There are no users</p>
</td>
</tr>
{{/each}}
{{else}}
<p>Loading...</p>
{{/if}}
酒吧
/* Users */
Meteor.publish('users', function() {
if (Roles.userIsInRole(this.userId, ['admin', 'team'])) {
return Meteor.users.find({}, {
fields: {
'profile.firstname': 1,
'profile.lastname': 1,
'emails': 1,
'username': 1,
'roles': 1,
'createdBy': 1
},
sort: {'roles': 1}
})
} else if (Roles.userIsInRole(this.userId, ['client'])) {
return Meteor.users.find({}, {
fields: {
'profile.firstname': 1,
'profile.lastname': 1,
'emails': 1,
'username': 1
}
});
}
});
客户端 JS
/* On created */
Template.users.onCreated(function() {
var instance = this;
instance.autorun(function() {
instance.users = function() {
instance.subscribe(Meteor.users.find({}));
}
});
});
/* Helpers */
Template.users.helpers({
users: function() {
var users = Meteor.users.find({});
return users;
}
});
我在以下全局帮助器的其他模板中也遇到错误 Exception in template helper: TypeError: Cannot read property 'username' of undefined
(尽管该帮助器按预期工作):
/* Current Username */
Template.registerHelper('currentUsername', function() {
return Meteor.user().username;
});
您的第一个错误可能是由于路由代码中的错误而导致的。确保您已在路由中定义参数并在任何路由代码中正确使用它们。
第二个错误是因为 Meteor.user() 不能保证总是立即定义。将您的助手更改为:
Template.registerHelper('currentUsername', function() {
var user = Meteor.user()
if( user ) {
return username;
}
});