【问题标题】:Meteor subscription in iron:router controller isn't workingIron中的Meteor订阅:路由器控制器不起作用
【发布时间】: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


【解决方案1】:

我试图解决的主要问题是将代码包装在if (this.ready()){ ... } 内部的data 方法中,并使用if (this.data()) { this.render(); } 添加一个动作挂钩。在我得到订阅后,我发现克里斯蒂安在 cmets 中说我的控制器设置可能会搞砸事情是正确的。它导致了其他奇怪的异常,我通过将钩子移动到每条路由而不是使用控制器来修复这些异常。至于我的Collections 设置,它可能是非常规的,但所有这些都运行良好(截至目前)。我可能希望稍后以标准方式设置它们,但到目前为止,使用对象中已经编写的方法对集合进行处理对我来说非常方便。

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2017-11-10
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    相关资源
    最近更新 更多