【发布时间】:2015-06-25 03:14:34
【问题描述】:
我在我的应用程序中使用 iron:router,并且我有一个控制器,它通过使用路径中的参数订阅集合中的一个文档。我可以访问服务器上我的集合中的所有文档,所以我知道那里有东西,但是当我尝试访问我在控制器的 waitOn 方法中订阅的数据时,数据是未定义的。这是这个问题的相关代码。
路由器代码:
this.route('unit', { path: 'unit/:unitId', template: 'unit', controller: 'UnitController' });
UnitController = BaseController.extend({
waitOn: function () {
return Meteor.subscribe('getUnit', this.params.unitId);
},
data: function () {
var id = this.params.unitId;
templateData = {
unit: Collections.units.model(Collections.units.getUnit(id))
};
return templateData;
}
});
出版:
Meteor.publish('getUnit', function(id) {
return Collections.units.data.find({ unitId: id });
});
在这里,我为我的收藏创建了一个对象(我只包括了重要的部分):
Collections.units = {
data: new Mongo.Collection("units"),
getUnit: function (id) {
return this.data.findOne({ unitId: id });
},
model: function(unitEntity) {
return {
unitId: unitEntity.unitId,
createdAt: unitId.createdAt,
packets: unitEntity.packets,
getLastPacket: function (id) {
return _.last(this.packets);
}
};
}
};
我已经尝试调试了很长一段时间,我可以在服务器和发布方法中对我想要的集合执行所有操作,但是当它到达控制器时,我无法访问任何的信息。在数据方法中 this.params.unitId 准确地返回了我想要的,所以这不是问题。抛出异常的地方是我在制作模型时尝试读取 unitEntity 的属性,但这只是因为它未定义。
知道我做错了什么吗?提前感谢您的任何回复。
【问题讨论】:
-
我的钱在
getUnit上。你确定它永远是Collections.units吗?同样,getLastPacket中的 this 似乎有点危险。浏览器和 node.js 可能不会应用相同的规则来定义this。 -
我知道代码的其他部分存在一些错误。忽略那些。我现在只是担心订阅问题
-
请详细说明您遇到的异常以及引发异常的位置。
-
-
你在
unit/123456?
标签: javascript meteor iron-router