2

我正在尝试使用 Knockout、pagerjs 和 history.js 设置 SPA。但是,当我单击包含 的链接时data-bind="'page-href': '/somepath'",出现 JS 错误:

对象函数 History() { [native code] } 没有方法“pushState”

这将向我表明我正在错误地初始化 pagerjs,但我认为我正确地遵循了演示。这是我初始化pagerjs的方式:

define(['knockout', 'pager', 'history'], function (ko, pager, history) {
    // [define my view model]

    pager.useHTML5history = true;
    pager.Href5.history = history;
    pager.extendWithPage(viewModel);

    // [apply bindings]

    pager.start();
});

为了使 history.js 能够作为 AMD 模块加载,我将其添加到 history.js 的底部:

// [original history.js code]

define(function() { return History; });

但是,我注意到它History没有pushState方法,这是 pagerjs 试图调用的方法。

集成pagerjs和history.js的正确方法是什么?

4

1 回答 1

3

谢天谢地,我找到了这个单元测试代码。这是我学到的:

  1. 您必须有一个<base href="..."/>来指定您的基本 URL。
  2. 您不应包含history.jsGit 中的原始文件,而应使用jquery.history.js捆绑包。
  3. 而不是使用pager.start(),使用pager.startHistoryJs()

这是我更新的初始化代码:

define(['knockout', 'pager', 'history'], function (ko, pager, history) {

    var viewModel = /* [Create my view model] */;

    pager.useHTML5history = true;
    pager.Href5.history = history;
    pager.extendWithPage(viewModel);

    ko.applyBindings(viewModel);

    pager.startHistoryJs();
});

这就是我的 AMD 化方式jquery.history.js

define(['jquery'], function () {

    // [Original code]

    return History;
});
于 2013-10-02T17:19:17.353 回答