我已经愉快地使用 JQM 有一段时间了。然而,我最近开始了一个新项目,该项目需要将动态创建的页面推送到历史记录中,其内容由 url 参数确定。我将向您展示我最初是如何使用 JQM 处理控制器的,以及我是如何尝试使用路由器插件的。
这就是我过去为 JQM 编写所有控制器的方式:
myApp.foo.controller = (function($){
"use strict";
var $page;
var init = function()
{
$page = $("#foo-page");
applyBindings();
};
var applyBindings = function()
{
// Page transition events
$page.bind("pagebeforeshow", onPageBeforeShow);
};
var onPageBeforeShow = function()
{
};
return {
init: init
}
})(jQuery);
$("#foo-page").live("pageinit", function(e)
{
myApp.foo.controller.init();
});
所以我现在使用的是JQM 推荐的路由插件。我没有使用脊椎或脊椎。我不想把它误认为是应用程序的基础。所以我加载了我所有的控制器,然后加载了我的 router.js 文件。
这给了我我期望的行为:
var router = new $.mobile.Router([
{"#foo-page": {events:"i", handler: myApp.foo.controller.init}},
{"#foo-page": {events:"s", handler: myApp.foo.controller.onPageShow}},
{"#dynamic-foo(?:[?/](.*))?": {events:"i", handler: myApp.dynamicFoo.controller.init}},
{"#dynamic-foo(?:[?/](.*))?": {events:"bs", handler: myApp.dynamicFoo.controller.onPageBeforeShow}},
]);
但这是使用路由器插件的正确方法吗?因为我阅读了文档,作者似乎使用路由器对象作为实际控制器。
需要明确的是,这对我有用我只是不确定这是否真的是路由的想法,或者这可能是错误的方法?