首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何防止本地Flow-Router操作函数覆盖组定义的元素

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

Stack Overflow用户
提问于 2016-06-24 19:24:52
回答 1查看 52关注 0票数 0

我有一个Flow-Router组定义,类似于:

代码语言:javascript
复制
var myRouteGroup = FlowRouter.group({
  name: "myGroupName",
  prefix: "/myPrefix",
  // Using arbitrary element to pass group wide defaults
  defaultGroupSettings: {item1: "value1", item2: "value2"};
});

然后在该组中定义一个路由:

代码语言:javascript
复制
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不再引用组定义,而只是回收现有的以前的路由组对象?或者是我没想过的事情。

EN

回答 1

Stack Overflow用户

发布于 2016-06-24 21:07:22

更明确地理解这个问题:

流路由器呈现路由器对象的" group“元素,并在引用组选项时使用该对象(似乎如此),而不是引用或重新运行路由组定义。

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

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

本质上,如果您像我们在本地route.action函数中所做的那样修改任何底层的“路由默认值”,由于流路由器是非反应性的,只要路由位于同一组中,路由组对象似乎就会从一个路由持续到另一个路由。这个"options“对象也会从路由定义传递到路由器。因此,这意味着如果在上面的情况下覆盖默认参数,则在调用覆盖该参数的路由之后,使用同一组的所有后续路由都会覆盖该参数。

我想出的解决方案是在组定义中执行一个默认重置函数:triggersExit: [ resetDefaults ]

然后就是重置默认设置。我在退出时这样做的原因是,下一个被调用的路由仍然可以在本地覆盖这些默认值:

代码语言:javascript
复制
function resetDefaults (context) {
  context.route.group.options.groupDefaultValue = "myVal";
};

我认为这应该会工作得很好,你可以查看out a discussion这个功能的演变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38012276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档