如何在Iron Router中访问数据
How to reach data within Iron Router?
在我的url为object/:_id
的页面上,用户通常应该只访问一个文档,我已经这样设置了:
waitOn: function() {
return Meteor.subscribe('objects', this.params._id),
},
data: function() {
return Objects.findOne({_id: this.params._id})
}
然而,也应该可以偷看并使用其他一些对象,,但只能使用与我们正在查看的对象颜色相同的对象,所以我也需要访问这些对象。
以下是我认为有效的方法:
onBeforeAction: function() {
var self = Objects.findOne({_id: this.params._id})
var color = self.color
Session.set('chosenColor', color)
this.next()
},
waitOn: function() {
return Meteor.subscribe('objects', Session.get('chosenColor'))
},
data: function() {
return Objects.findOne({_id: this.params._id})
}
应该注意的是,这在一开始是有效的,但后来突然莫名其妙地停止了工作。由于某种原因,self
现在总是"未定义"。
在Iron Router中访问这些数据的正确方法是什么?
这里有循环逻辑:您试图加载一个对象并在订阅将发布该对象的集合之前获取其颜色。只需将颜色逻辑移动到服务器上的发布功能即可。
客户端js:
waitOn: function() {
return Meteor.subscribe('objects', this.params._id);
},
data: function() {
return Objects.findOne({_id: this.params._id})
}
服务器js:
Meteor.publish('objects',function(id){
check(id, Meteor.Collection.ObjectID);
var self = Objects.findOne({_id: id})
if ( self ){
var color = self.color;
return Objects.find({ color: color });
}
else this.ready();
});
在数据中尝试this.ready()
条件:
waitOn: function() {
return Meteor.subscribe('objects');
},
data: function() {
if (this.ready()) {
var self = Objects.findOne({_id: this.params._id});
var color = self.color;
return Objects.findOne({_id: this.params._id}, color);
}
}
相关文章:
- jQuery从html访问数据
- 如何处理在javascript中访问数据结构的两个回调
- 无法使用变量访问数据 JSON
- nodejs API 查询如何访问数据
- 使用jquery循环表行并通过类名访问数据
- 从JavaScript对象访问数据's数组成员变量
- json访问数据未正确显示
- JSON可以't访问数据返回未定义
- AngularJS从另一个数据模型访问数据模型
- 回调访问数据
- RxJs:在flatMapMapLate之前访问数据最新
- 如何使用数据集访问数据属性值
- Chrome 扩展程序无法访问数据存储
- 角度:访问数据
- ExtJS v3 - 从表单面板内的网格面板访问数据
- 从外部 Javascript 文件访问数据
- 使用 AngularJS 从没有键值的 JSON 访问数据值
- Birt:从 beforeFactory 访问数据集的内容
- 访问数据结构中的元素
- 使用数组和对象的组合循环访问数据