在iron router中使用查询参数修改模板
Modifying template with query params in iron-router
我正试图根据querystring参数中发送的值将一个类添加到列表项中,但我在计算事物的运行顺序和将数据传递到正确的位置时遇到了问题。
在我的模板中,我有以下片段
<ul id="reviews">
<li>
<label class="great"><span></span><input type="radio" name="review" value="Great" placeholder="Great">Great</label>
</li>
<li>
<label class="fair"><span></span><input type="radio" name="review" value="Fair" placeholder="Fair">Fair</label>
</li>
<li>
<label class="not-good"><span></span><input type="radio" name="review" value="Not good" placeholder="Not good">Not good</label>
</li>
</ul>
在我的客户端JavaScript中,我有以下路由器配置:
Router.map(function () {
this.route('review', {
path: '/',
template: 'review',
data: function () {
var params = this.params;
return {
fullname : params.fullname,
}
},
after: function() {
var params = this.params;
setReview(params.review);
}
});
它调用函数setReview:
function setReview(review) {
console.log('setReview called with: '+review);
switch(review) {
case "Great":
console.log($('#reviews'));
$('#reviews').find('.great').addClass('selected');
$('#reviews').find('.great').find('input').prop('checked', true);
break;
case "Fair":
$('#reviews').find('.fair').addClass('selected');
$('#reviews').find('.fair').find('input').prop('checked', true);
break;
case "Bad":
$('#reviews').find('.not-good').addClass('selected');
$('#reviews').find('.not-good').find('input').prop('checked', true);
break;
}
}
调用了最后一个函数,但无法正常工作,因为$('reviews')在页面上找不到正确的元素,但似乎返回了整个文档。
看起来这一切都发生在页面呈现之前,所以它还找不到我的列表。
有没有更好的方法让我做这种事?
TIA
如果你确定你想使用iron路由器,那么你可能可以让它与这样的东西一起工作:
Router.map(function () {
this.route('review', {
path: '/',
template: 'review',
after: function() {
Session.set('params', this.params);
}
});
Template.reviews.rendered = function() {
setReview(Session.get('params');
};
但总的来说,这似乎不像流星的做事方式。
为什么不试试这样的东西:
<ul id="reviews">
<li>
<label class="great {{greatselected}">
<span></span>
<input type="radio" name="review" value="Great"
placeholder="Great" {{greatchecked}}>Great</label>
</li>
.....
</ul>
然后说:
Template.reviews.greatselected = function() {
return (Session.get('params').review == "Great" ? "selected" : "");
}
Template.reviews.greatchecked = function() {
return (Session.get('params').review == "Great" ? "checked" : "");
}
最简单的方法是扩展您的数据函数以包含评审参数:
data: function () {
var params = this.params;
return {
fullname : params.fullname,
review: params.review
}
}
然后按照@christian fritz的建议进行:
<input type="radio" name="review" value="Great"
placeholder="Great" checked="{{greatchecked}}">Great</label>
和
Template.reviews.greatselected = function() {
return this.review === "Great";
}
相关文章:
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- 将修改后的数组作为参数传递给函数
- 是否可以稍微修改我的对称差分函数,使其可以接受未知数量的参数
- 在iron router中使用查询参数修改模板
- 在Javascript中修改Razor参数
- 优雅地修改现有链接's参数
- 使用jQuery修改url参数而不刷新页面
- 修改req.url;t更新url参数(req.query)
- 在Javascript中修改循环函数的参数
- JavaScript 修改 URL 参数数组
- 在触发特定 POST 请求时修改 HTTP POST 请求正文(post 参数)
- 修改传入参数的对象以回调_each
- 从作为参数传入的数组中删除对象不会修改原始数组 (Angular)
- 加载json-url参数代码(javascript修改)
- 修改JSXGraph网格默认参数
- 如何在循环中创建新变量的同时修改函数参数
- 修改元素'事件函数的参数
- Jquery用于修改页面上的所有锚标记href,并从href属性中提取关键请求参数
- Jquery代码修改表单提交的参数
- 通过参数修改函数内部的全局变量