2016-06-24 17 views
0

を上書きローカルフロールータアクション機能を防ぐために、私はに似たフロールータグループの定義を持っている:どのグループ定義された要素

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

I、そのグループ内のルートを定義より:

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の問題ですか?あるいは、私が考えなかったことかもしれません。

答えて

0

より明確に理解問題:

フロールータはルータオブジェクトの「グループ」要素をレンダリング、およびグループオプションではなく、参照または再実行ルートを参照するときに、そのオブジェクトを(それはそう)を使用していますグループ定義。

これは、同じグループを持っていて、以前にレンダリングされたグループオブジェクトを以前のルートから継承するように見えるすべての後続ルートを意味します。それと一貫して、非反応的なアプローチです。

これに対処するために開発した方法は、グループ定義にtriggersExit: [resetDefaults]を追加することでした。グループ内で呼び出されたすべてのルートは、関数を追加してルートを呼び出す間にルートのデフォルトをリセットします。

基本的には、ローカルのroute.action関数Flow-Routerは非応答性であるため、ルータグループオブジェクトは、ルートが同じグループに属している限り、ルート間で持続するように見えます。また、この「オプション」オブジェクトはルート定義からルータに渡されます。つまり、上のケースでデフォルトのパラメータを上書きすると、それを上書きするルートが呼び出された後、その同じグループを使用するすべての後続のルートで上書きされます。

私が思いついた解決策は、グループ定義でtriggersExit: [ resetDefaults ]のようにデフォルトリセット機能を実行することでした。

次に、デフォルトをリセットするだけです。

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

これはかなりよく、私は考えて動作するはずです、そしてあなたは、この機能の進化のout a discussionを確認することができますと呼ばれている次のルートがまだローカルでこれらのデフォルトを上書きすることができるように、私は終了時にそれをやった理由があります。

関連する問題