如何防止本地Flow-Router动作函数覆盖组定义的元素

时间:2016-06-24 11:24:52

标签: javascript meteor flow-router

我有一个类似于:

的Flow-Router组定义
var myRouteGroup = FlowRouter.group({
  name: "myGroupName",
  prefix: "/myPrefix",
  // Using arbitrary element to pass group wide defaults
  defaultGroupSettings: {item1: "value1", item2: "value2"};
});

我定义该组中的路线:

myRouteGroup.route("/home",{
  name: "myRoute",
  triggersEnter: [ /*...*/ ],

  action: function () {
    // Get the arbitrary settings object from group definition
    var settings = this.group.options.defaultGroupSettings;
    // Override one of the settings element's value
    settings.item1 = "new value";
    // Render the route, and pass the modified settings
    BlazeLayout.render("layoutTemplate", settings);
  }

});

我想解决的问题。调用此路由后,上面的代码将覆盖连接到组的所有后续路由的defaultGroupSettings.item1。就好像本地覆盖覆盖组设置对象,或者如果后续路由在同一组中,则不会再次调用组设置对象。

这是数据范围的问题吗?或者,如果被调用的新路由是同一组的一部分,并且只是回收现有的先前路由组对象,那么Flow-Router是不是再次引用组定义的问题?或者也许是我没想过的东西。

1 个答案:

答案 0 :(得分:0)

更明确地理解问题:

Flow路由器渲染"组"路由器对象的元素,并在引用组选项时使用该对象(似乎),而不是引用或重新运行路由组定义。

这意味着所有被调用但具有相同组的后续路由似乎只是从先前路由继承先前渲染的组对象。与它的非反应性方法保持一致。

我开发处理此问题的方法是将triggersExit: [resetDefaults]添加到组定义中。现在,在组内调用的任何路由都将通过添加函数在路由调用之间重置路由默认值:

基本上,如果您修改任何基础"路由默认值"正如我们所做的那样,在本地route.action函数中,由于Flow-Router是非反应性的,只要路由在同一个组中,路由器组对象似乎就会从路由到路由持续存在。这个"选项" object从路由定义传递给路由器。所以这意味着如果你在上面的情况下覆盖一个默认参数,那么在覆盖它的路由被调用之后,它将覆盖使用同一组的所有后续路由。

我提出的解决方案是在组定义中执行默认重置功能:triggersExit: [ resetDefaults ]

然后只是重置默认值。我在退出时执行此操作的原因是,调用的下一个路径仍然可以在本地覆盖这些默认值:

function resetDefaults (context) {
  context.route.group.options.groupDefaultValue = "myVal";
};

我认为这应该很好用,你可以查看out a discussion此功能的演变。