3

我正在使用jQuery Address来处理与我的 AJAX 应用程序的深度链接。我的 URL 采用以下格式:example.com/#/section/item/param/param/param...我使用.change()侦听器设置它来处理 URL 的不同部分。因此/project/my-project/view-item/2/compose,将滑动打开该项目和该项目下的撰写框。问题是,每当 URL 更改为该 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 回答