我有一个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不再引用组定义,而只是回收现有的以前的路由组对象?或者是我没想过的事情。
发布于 2016-06-24 21:07:22
更明确地理解这个问题:
流路由器呈现路由器对象的" group“元素,并在引用组选项时使用该对象(似乎如此),而不是引用或重新运行路由组定义。
这意味着被调用但具有相同组的所有后续路由似乎只是简单地从先前的路由继承先前渲染的组对象。与它的非反应性方法保持一致。
我开发的处理此问题的方法是将triggersExit: [resetDefaults]添加到组定义中。现在,在组内调用的任何路由都将通过添加以下功能在两次路由调用之间重置路由默认值:
本质上,如果您像我们在本地route.action函数中所做的那样修改任何底层的“路由默认值”,由于流路由器是非反应性的,只要路由位于同一组中,路由组对象似乎就会从一个路由持续到另一个路由。这个"options“对象也会从路由定义传递到路由器。因此,这意味着如果在上面的情况下覆盖默认参数,则在调用覆盖该参数的路由之后,使用同一组的所有后续路由都会覆盖该参数。
我想出的解决方案是在组定义中执行一个默认重置函数:triggersExit: [ resetDefaults ]。
然后就是重置默认设置。我在退出时这样做的原因是,下一个被调用的路由仍然可以在本地覆盖这些默认值:
function resetDefaults (context) {
context.route.group.options.groupDefaultValue = "myVal";
};我认为这应该会工作得很好,你可以查看out a discussion这个功能的演变。
https://stackoverflow.com/questions/38012276
复制相似问题