【问题标题】:IronRouter get data in layoutIronRouter 在布局中获取数据
【发布时间】:2016-01-08 06:26:27
【问题描述】:

我们的布局需要控制器中定义的当前数据,如下所示:

TripController = RouteController.extend({
    layoutTemplate: 'tripLayout',
    data: function () {
        return Trips.findOne({_id: this.params._id});
    }
});

我们的问题看起来像是一场数据竞赛:

大多数时候Template.currentData() 为空,但有时(主要是在调试时)它是我们定义的data。 只有当我们在tripLayout中重新加载页面时才会出现问题,而不是当我们从另一个页面进入trip layout时。

请注意,我们已经加载了 `TripController,因为控制器参数设置正确。

Template.tripLayout.onRendered(function() { // note, this is the layout template
    Iron.controller.params._id // correct id
    Template.currentData() // null
});

我们试图实现的是一个拆分布局,其中右侧始终相同,左侧由 yield 填充(见截图)

更新 (此更新是错误的)

我想我发现了错误:

waitOn: function () {
    return [Meteor.subscribe('public-trips'),
        Meteor.subscribe('my-trips')];
}

一旦我删除了数组(所以只有一个订阅),

data: function () {
    return Trips.find({}).fetch();
}

不再返回 0。我会再研究一下。

更新2

所以我最初的假设是错误的,只订阅一个并没有帮助。这实际上只是一个竞争条件。

UPDATE3

我设法重现了它:meteorpad

在警报中,它显示了它拥有的玩家数量。第一次是 0,然后是 6。但是 0 不应该出现,因为我们 'waitOn' 它?!

【问题讨论】:

  • 您的路由中是否定义了 waitOn 以等待加载 Trips 订阅?
  • 是的,我们这样做:waitOn: function () { return [Meteor.subscribe('trips')]}
  • 我猜你也有一个loading 模板?
  • 您是否尝试过使用 this.data 而不是 Template.currentData()。我通常毫无问题地使用前者。我知道他们都应该返回相同的东西..但也许 currenData() 以更迂回的方式做到这一点?
  • 试试this.data,onRendered回调中的this就是TemplateInstance

标签: javascript meteor iron-router meteor-blaze


【解决方案1】:

我们设法解决了“问题”(这是预期的行为,但我们找到了解决方法)!详情https://github.com/iron-meteor/iron-router/issues/1464#issuecomment-158738943

好的,以下是我们解决该问题的方法:

第一件重要的事情是包含动作函数,如 所以:

action: function() {
    if (this.ready()) {
       this.render();
    }
}

这几乎适用于所有事情,但我们仍然遇到了一些问题。在 在我们的案例中,它是关于未使用 yield 渲染的模板, 因此不受 Iron Router 的控制。将这些切换到 内容区域(使用 {{yield 'contentRegionName'}}),然后 像这样在动作函数中显式渲染它们:

action: function() {
    if (this.ready()) {
        this.render();
        this.render('contentRegionTemplate', {to: 'contentRegionName'});
    } 
}

你需要这些动作函数,因为 waitOn 只意味着 在那里定义的潜艇将被添加到候补名单中,但不是那个 候补名单将被等待。本质上,现在发生的事情是你的 由于反应性,动作函数被调用了两次,并且 模板只有在数据准备好后才会呈现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多