0

我很确定这个问题都是关于正则表达式的。

我正在使用此处找到的 JQM 路由器插件。它使用正则表达式来匹配页面和绑定事件处理程序。在文档中它指出:

一个典型的错误是忘记了 $ 运算符。如果您有两个页面,例如 #product 和 #productList,假设路径“#product”将匹配两个页面,从而导致意外行为

行。所以我有一个#item 页面和一个#items 页面,所以我在#item 前面加上一个$。但现在它根本不绑定事件处理程序。如果我不使用美元,那么项目的绑定将应用于两个页面。这是实际的实现:

var router = new $.mobile.Router([
    {"#items": {events:"i", handler: items.controller.init}},
    {"#items(?:[?/](.*))?": {events:"bs", handler: items.controller.onPageBeforeShow}},

    {"#item": {events:"i", handler: item.controller.init}},
    {"#item(?:[?/](.*))?": {events:"bs", handler: item.controller.onPageBeforeShow}},

]);
4

2 回答 2

0

匹配正则表达式中字符串的$结尾。你不想把它放在开头,你想把它放在最后。

例如:

#product
  matches
#product
#productList

#product$
  matches
#product

试试这个代码:

var router = new $.mobile.Router([
    {"#items$": {events:"i", handler: items.controller.init}},
    {"#items(?:[?/](.*))?$": {events:"bs", handler: items.controller.onPageBeforeShow}},

    {"#item$": {events:"i", handler: item.controller.init}},
    {"#item(?:[?/](.*))?$": {events:"bs", handler: item.controller.onPageBeforeShow}},

]);
于 2012-08-13T15:33:51.117 回答
0

你必须后缀,而不是前缀,

#items$
#items(?:[?/](.*))?$
#item$
#item(?:[?/](.*))?$
于 2012-08-13T15:35:58.383 回答