我正在为我的流星项目使用铁路由器,一切都很顺利,但我只是遇到了一些奇怪的行为.
我有一个循环设置为一个看起来像这样的项目列表.
{{#each list_items}}
<div>{{user.username}}
<a href="{{link}}">Click here!</a>
</div>
{{/each}}
Run Code Online (Sandbox Code Playgroud)
我的用户的JSON对象如下所示:
{
user: {
username: jdoe
},
images: {
low-res-url: http://example.com
},
link: http://example.com/profile
}
Run Code Online (Sandbox Code Playgroud)
现在{{user.username}}按预期显示,但当我尝试将{{link}}放入href时,我从铁路由器说出错
"You called Router.path for a route named undefined but that that route doesn't seem to exist. Are you sure you created it?"
Run Code Online (Sandbox Code Playgroud)
任何帮助或建议将不胜感激.
我有一个寻找帖子的简单邮政路线_id.问题是pathFor助手创建了这样的路径:
ObjectID("52e16453431fc2fba4b6d6a8")
Run Code Online (Sandbox Code Playgroud)
我猜mongoDB插入已被更改,现在该_id对象在其中包含另一个对象调用_str.
这是我的路线:
this.route("post", {
path: "/post/:_id",
waitOn:function(){
NProgress.start();
Meteor.subscribe("Teams");
},
before: function () {
NProgress.done();
},
data: function () {
return Posts.findOne({_id: this.params._id});
}
});
Run Code Online (Sandbox Code Playgroud)
目前,它创建了一个href像:
post/ObjectID("52e16453431fc2fba4b6d6a8")
Run Code Online (Sandbox Code Playgroud)
点击它打开一个网址
post/ObjectID("52e16453431fc2fba4b6d6a8")
Run Code Online (Sandbox Code Playgroud)
但是,我得到了"NotFound"模板而不是帖子.
我怎样才能解决这个问题?
我有2个模板:
1)mainLayout.html- >所有页面必须使用的一般布局.(例如页面标题,导航栏,页脚)
Router.configure({
layoutTemplate: 'mainLayout'
})
<template name="mainLayout">
{{> header}}
<div class="container-fluid">
{{> yield}}
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
2)specialLayout.html- >自定义布局继承main-layout.html但附加模板(例如侧面/标签菜单)
我该如何定义specialLayout?请注意,specialLayout应该定义标题,导航栏和页脚mainLayout.
如果我有想要使用的路线X,我该specialLayout怎么写呢?
在我的应用程序中,我想为用户播种数据库并向他们发送注册链接以激活他们的帐户(并选择密码).我还希望他们验证/更改一些配置文件数据.
在服务器上我按如下方式为数据库播种:
Meteor.startup(function () {
if(Meteor.users.find().count() === 0) {
var user_id = Accounts.createUser({ email: 'some@email.com', profile: { some: 'profile' } });
Accounts.sendEnrollmentEmail(user_id);
}
})
Run Code Online (Sandbox Code Playgroud)
注册链接按预期发送,但我想为单击电子邮件中的URL时创建自定义模板.最好由铁路由器处理.(不使用accounts-ui包).
我尝试过将用户重定向到这样的自定义路线:
var doneCallback, token;
Accounts.onEnrollmentLink(function (token, done) {
doneCallback = done;
token = token;
Router.go('MemberEnroll')
});
Run Code Online (Sandbox Code Playgroud)
哪个不起作用(它改变了网址但没有渲染我的模板)
我还尝试更改服务器上的注册URL,如下所示:
Accounts.urls.enrollAccount = function (token) {
return Meteor.absoluteUrl('members/enroll/' + token);
};
Run Code Online (Sandbox Code Playgroud)
但是当我这样做时,Accounts.onEnrollmentLink回调不会触发.此外,更改URL没有记录,所以我不确定它是一个好的做法.
任何帮助表示赞赏.
我想在Iron Router正在呈现的导航列表项中添加一个"active"类.
这是我的标记:
<ul>
<li>
{{#linkTo route="option1"}}
<span class="fa fa-fw fa-option"></span>
Option 1
{{/linkTo}}
</li><li>
{{#linkTo route="option2"}}
<span class="fa fa-fw fa-option"></span>
Option 2
{{/linkTo}}
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我已经阅读了指南和各种文章,但无法在任何地方找到这个.假设我需要某种帮手?
我只是试图在帮助器中按名称引用铁路由器路由,而不是硬编码URL.因此,当用户单击按钮时,它们将被重定向到具有来自按钮的data-id属性的id的项路由.
items.html
<button class="btn btn-default btn-xs pull-right" data-id={{_id}}>View</button>
Run Code Online (Sandbox Code Playgroud)
items.js
Template.items.events({
'click button': function(e) {
// This works but is hard coding the path
Router.go("/item/" + ($(e.currentTarget).data('id')));
// This doesn't work but is there an alternative method of doing this
Router.go(pathFor('item' id=_id))
}
});
Run Code Online (Sandbox Code Playgroud)
router.js
Router.route('/item/:_id', {
name: 'item'
});
Run Code Online (Sandbox Code Playgroud)
我当然可以在这样的模板中使用pathFor:
<a href="{{pathFor 'item' id=_id}}">View</a>
Run Code Online (Sandbox Code Playgroud)
或者指定数据属性:
<button class="btn btn-default btn-xs pull-right" data-path={{pathFor 'item' id=_id}}>View</button>
Run Code Online (Sandbox Code Playgroud)
但是想知道是否有替代/更简洁的方法来做到这一点?如果不是,我可能会恢复使用标签.
我正在使用Meteor与AutoForm和铁路由器.
我有一个autoform用于插入记录,我想重定向到另一个页面以在成功插入后查看记录. 什么是普遍接受的方式?
如果我使用标准的autoform插件,如:
{{#autoForm collection="Articles" id="articleSubmit" type="insert"}}
Run Code Online (Sandbox Code Playgroud)
我看不出如何重定向?
如果我使用'method'类型,如下所示:
{{#autoForm collection="Articles" id="articleSubmit" type="method"}}
Run Code Online (Sandbox Code Playgroud)
然后我必须编写一个不特别干的插入方法.
流星中的子域支持(与slack一样 - http://team.slack.com)
在松弛时,我的应用程序用户可以创建自己的子域(唯一的),并根据子域应该加载数据,并在此周围应用程序将继续.我可以使用像http://slack.com?team=TeamName这样的东西,但我认为子域会更干净,更好.
任何建议/指针.
谢谢.
谁有人遇到同样的问题?我正在使用带有模板级订阅的铁路由器.
例如.我有一个很长的页面"项目列表",我可以向下滚动.然后我点击底部某处的某个项目,然后下一个模板呈现低于应有的值.
想象一下,你在youtube上搜索,向下滚动结果,然后你点击一个视频片段,但它不是从顶部打开而是低,所以你需要滚动到顶部才能看到视频.
我试图将"滚动到顶部"脚本放入onRendered回调中,但这种"跳跃"可以用肉眼识别.所以它变得更糟.
(更新)我现在找到了这个解决方案:
Router.onBeforeAction(function() {
$(window).scrollTop(0);
this.next();
});
Run Code Online (Sandbox Code Playgroud) 使用铁路由器版本0.9.4如何在不更改浏览器历史记录的情况下更新URL查询参数?
我有一堆选择框可以更新URL查询参数.在某些情况下,我想更新URL而不在window.history中添加额外的条目.很多模板都依赖于Router.current().params反应变量,因此我需要在更改路径时更新它.