如何防止本地流量,路由器动作功能覆盖定义的一组元素
我有类似的流通型路由器组定义:如何防止本地流量,路由器动作功能覆盖定义的一组元素
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会再次引用组定义的问题吗?或者可能是我没有想到的东西。
的问题更清楚地理解:
流量路由器使得路由器对象的“组”元素,并使用该对象(似乎)引用该组的选项时,而不是引用或重新运行路线组定义。
这意味着所有后来被调用但具有相同组的路由似乎只是从先前的路由继承了先前渲染的组对象。符合它的非反应性方法。
我开发的方法是将triggersExit: [resetDefaults]
添加到组定义中。现在在组中调用的任何路由将通过添加该函数在路由调用之间重置路由默认值:
本质上,如果您修改任何基础“路由默认值”,就像我们在做的那样,在本地route.action函数,由于Flow-Router是非反应性的,只要路由处于同一组中,路由器组对象似乎从路由到路由仍然存在。这个“选项”对象也从路由定义传递给路由器。所以这意味着如果你在上面的例子中覆盖了一个默认参数,那么在覆盖它的路由被调用之后,它将被使用同一组的所有后续路由覆盖。
我想出的解决方案是做一个默认值重置功能,如下所示:triggersExit: [ resetDefaults ]
在组定义中。
然后只是做一个重置的默认值。我做这件事是退出的原因是,在未来的路线被称为仍然可以在本地覆盖这些默认值:
function resetDefaults (context) {
context.route.group.options.groupDefaultValue = "myVal";
};
这应该工作得很好,我认为,你可以检查这个功能的演变out a discussion。