3

jQueryアドレスを使用して、AJAXアプリケーションとのディープリンクを処理しています。私のURLは次の形式です。URLのさまざまな部分を処理するようにリスナーexample.com/#/section/item/param/param/param...で設定しています。.change()その/project/my-project/view-item/2/composeため、そのプロジェクトとそのアイテムの下にある作成ボックスをスライドして開きます。問題は、URLがそれに変更されるたびに、その時点までのすべてのアクションが呼び出されることです。(URLが/project/my-project呼び出されたときに発生するアクションなど。)

「チェーンを上る」ことなく、私が望むアクションだけを処理するための最良の方法は何ですか?

4

3 に答える 3

1

イベント変数は、プロパティとともに関数に渡されchangeます: value, path, pathNames, parameterNames, parameters, queryString. 監視するプロパティは ですpathNames

ここに私がまとめたいくつかのスニペットがあります:

var $current_path = window.location.hash;
$.address.change( function(event) {

   // get the difference in the two paths
   $changed_path = event.path.replace(new RegExp('^'+$current_path,'i'), '');

   // make sure we update the current path
   $current_path = event.path;

   // how deep is the new path?
   $level = event.pathNames.length;

   // break the changed part into segments, ignoring leading/trailing slashes
   $changed_path_array = $changed_path.replace(/^\/|\/$/g, '').split('/');

   // let's see what level actually changed from the current path
   $changed_level = $level - $changed_path_array.length;

} );

次に、新しい深さをセグメントの配列と組み合わせて使用​​して、更新が必要なものを正確に特定することにより、残りの関数を整理できます。$current_path に基づいて、新しいページの読み込みを行っているか、ページのどこかで小さな変更を行っている可能性があります。

于 2011-05-06T13:20:53.007 に答える
0

「現在の」URL/プログラムの状態を追跡し、それを取得したものと比較して、change()次に実行する必要があるアクションを把握する必要があります。

于 2011-05-06T12:19:01.990 に答える
0

PathJSなど、高度なクライアント側ルーティング用に構築されたものを使用するとメリットがあるようです。使い方はとても簡単で、次のようなもっとシンプルでエレガントなことができます。

// Define a route
Path.map("#/project/my-project/view-item/:id/compose").to(function(){
    var id = this.params["id"]; //get your ID
    $("#panel_" + id).show(); // Do something with the id.
});

// Start listening for changes
Path.listen():
于 2011-05-07T00:21:53.997 に答える