【问题标题】:jQuery Mobile and MVVM challengesjQuery Mobile 和 MVVM 挑战
【发布时间】:2012-07-25 23:53:22
【问题描述】:

我在尝试使用 JQM 和 MVVM 时遇到了一些挑战。我也在尝试使用 knockout.js。

例如,目前我正在尝试实现一个类似于iOS页面控件的导航(小圆点表示您可以滑动导航到下一页):

要显示的数据是从服务器获取的,需要在 JQM 页面中显示。所以需要动态创建JQM页面。

从 UI 的角度来看,我计划使用包含点的固定页脚(基于页数)。

问题在于需要在 JQM 页面之间持久存在的视图模型,因为我不想逐页从服务器加载数据,数据是立即加载的,并且预计客户端会将其显示在页面。

我可以有一个视图模型来保存数据并贯穿应用程序的整个生命周期,并将每个页面视图绑定到它。 相反,只要视图真正需要它,我想保持视图模型处于活动状态。

我正在考虑的解决方案是捕获 jQueryMobile 页面导航事件并查看导航是否在这些页面之间。 如果不是,则应删除视图模型(将其分配给 null)。 下次如果需要加载这些页面中的任何一个(例如通过导航回到最后一页),则重新创建视图模型(再次从网站获取数据)。

有更好的方法吗?

【问题讨论】:

    标签: jquery-mobile mvvm knockout.js knockout-2.0


    【解决方案1】:

    您为什么不试试JQM pagination plugin 以及@calavoow 提到的持久页脚?

    这将为您提供带有固定页脚的可拖动 JQM 页面。

    【讨论】:

    • 对不起,您似乎也没有理解我的问题。
    • 那么,您希望多个页面“在一个视图中”,这样您就不必重新获取任何在用户滑动时不可见的页面?您可以尝试 JQMs 多页,这将允许您加载“x-pages-in-one-document”。如果您的“视图”中有页面 A、B、C、D,则可以设置一些内容以在它们之间导航,而无需从服务器重新获取任何内容。您的视图保持活力
    • 多页虽然很棘手,因为您无法从现有页面加载多页。 JQM 多页基本上要求您的整个应用程序位于多页/视图中(除非您 rel="external"-link 到其他 JQM 页面(没有转换!)。您也可以看看我的multiview plugin。它仍然有效-正在进行中,但您可以在 JQM 包装页面中使用单个面板,并将所有滑动页面放入此面板中。
    • 你也可以prefetch pages 让它们已经加载到DOM中。
    • 谢谢,我已经知道了。问题是如何设计视图模型以在特定页面上持久化
    【解决方案2】:

    您应该查看 jQueryMobile 文档中的 Persistent Footers page

    【讨论】:

    • 我已经明确提到我将使用这些。这不是我的问题的想法。问题是如何让视图模型保持活力。