3

両方とも同じ HTML ファイルに含まれていますが、異なる JS ドキュメントで定義された 2 つのルートがあります。ルート 1 は次のようになります。

Router = can.Control({
   "invoices/:id route": function(data){
    //load an invoice by id
   }
 });

もう 1 つは次のようになります。

Router = can.Control({
   "receipts/:id route": function(data){
    //load a receipt by id
   }
 });

#!receipts/1 を参照すると、領収書と請求書の両方がインスタンス化されています。それはなぜですか、どうすれば修正できますか?

4

1 に答える 1

2

これは基本的な JavaScript の問題であるため、CanJS のドキュメントには記載されていません。

変数が異なるスクリプトで宣言されていても、それらが同じページに含まれているという事実は、それらが両方とも同じグローバル名前空間に存在することを意味することに注意してください。したがって、2 番目の Control オブジェクト宣言が最初の宣言を上書きします。

最も簡単な答えは、各 Control オブジェクトを異なる変数 (Router1、Router2 など) に割り当てることです。

また、パフォーマンスを向上させるために、両方の宣言を 1 つのファイルにまとめたほうがよいでしょう。

于 2012-12-20T11:26:19.880 に答える