2013-04-16 3 views
5

sammy.jsルーティングが期待通りに動作することができません。サミールーティングが動作しない

私は以下のJavaScriptを持っています。

(function ($) { 

    var app = $.sammy('#main', function() { 

     this.get('#/', function (context) { 
      context.log("start page"); 
     }); 

     this.get("#/another/:id/", function (context) { 
      context.log("another page with id = " + context.params["id"]);   
     }); 
    }); 

    $(function (context) { 
     app.run('#/'); 
    }); 

})(jQuery); 

私の理解では、URLがあれば、新しいルートが宣言したルートの1つに対応して変化し、を持っている時はいつでも、私は、コンソールログに関連するメッセージが表示されなければならないことです。

しかし、私はそうではありません。

ページが最初に読み込まれると、「開始ページ」メッセージが表示されます。ここまでは順調ですね。

Iその後、

  • [私のURL]を指すリンクをクリック/#/別/ 1/
  • 手動で[私のURL]を入力/#/別/ 1 /アドレスに変換する場合私は第2の経路のためのメッセージが表示されないすなわち>

...何も起こりません、を入力し<をバーとヒット。

ただし、アドレスバーの2番目のルートでF5キーを押すかブラウザのrefreshボタンをクリックすると、ページがリロードされ、予期されるコンソールメッセージが表示されます。

ハイパーリンクやキーボードでURLハッシュが変更されたときにSammyに通知しないでください。スクリプトに追加する必要があるものはありますか?

答えて

7

各sammyアプリケーションは、DOM要素にアタッチする必要があります。

おそらく、あなたのページから#main要素フォームが不足している可能性があります。

ですから、どこかDOMで#main要素を追加する必要があります:それはbody要素に自分自身を添付し、この場合

var app = $.sammy(function() { 

    this.get('#/', function (context) { 
     context.log("start page"); 
    }); 

    this.get("#/another/:id/", function (context) { 
     context.log("another page with id = " + context.params["id"]); 
    }); 
}); 

セレクタなし

<div id="main"> 
</div> 

か、サミーを初期化する必要があるが。

Live Demo