2

我已经愉快地使用 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}},
    ]);

但这是使用路由器插件的正确方法吗?因为我阅读了文档,作者似乎使用路由器对象作为实际控制器。

需要明确的是,这对我有用我只是不确定这是否真的是路由的想法,或者这可能是错误的方法?

4

1 回答 1

3

不用担心,使用路由器没有“正确的方法”,您的方法是正确的。

做同样事情的另一种方法是:

var router = new $.mobile.Router([
    {"#foo-page": {events:"i", handler: "init"}},
    etc
],myApp.foo.controller);

这只是口味问题。

于 2012-09-06T11:01:23.420 回答