Pager.js + History.js + Require.js - "Unable to get property 'bind' of undefined or null reference"

Pager.js + History.js + Require.js - "Unable to get property 'bind' of undefined or null reference"

我正在使用 Require.js、Pager.js 和 History.js 设置一个新的 Knockout 网络应用程序。我已经设置了初始化 according to the docs,但是当我调用 pager.startHistoryJs().

时收到来自 Pager.js 的 "Unable to get property 'bind' of undefined or null reference" 错误

这是我的 Require.js 配置:

require.config({
    paths: {
        'knockout': '/scripts/lib/knockout-3.2.0',
        'jquery': '/scripts/lib/jquery-1.11.2.min',
        'text': '/scripts/lib/text',
        'pager': '/scripts/lib/pager.min',
        'history': '/scripts/lib/history'
    },
    shim: {
        'pager': ['jquery', 'knockout'],
        'history': ['jquery', 'pager', 'knockout'],
    },
    waitSeconds: 0
});

这是我的 Require.js 初始化脚本:

require(['knockout', 'viewmodel/appViewModel', 'jquery', 'pager', 'history', 'lib/domReady!'], function (ko, appViewModel, $, pager) {
    pager.useHTML5history = true;
    pager.Href5.history = History;
    var viewModel = new appViewModel();
    pager.extendWithPage(viewModel);
    ko.applyBindings(viewModel);
    pager.startHistoryJs();
});

Here's the line in Pager.js(第 1497 行)抛出错误:

// Bind to StateChange Event
pager.Href5.history.Adapter.bind(window, 'statechange', function () {
    var relativeUrl = pager.Href5.history.getState().url.replace(pager.Href5.history.getBaseUrl(), '');
    goTo(relativeUrl);
});

我错过了什么?我没能找到很多关于此错误的相关信息。

您的 require 函数中似乎缺少 History(可能还有 lib/domReady! 的内容)参数。

require(['knockout', 'viewmodel/appViewModel', 'jquery', 'pager', 'history', 'lib/domReady!'], function (ko, appViewModel, $, pager, History, domReady) {
    pager.useHTML5history = true;
    pager.Href5.history = History;
    var viewModel = new appViewModel();
    pager.extendWithPage(viewModel);
    ko.applyBindings(viewModel);
    pager.startHistoryJs();
});

您遇到的错误与在未加载适配器的情况下加载 History.js 一致。如果我查看 history.js 中的代码,我发现如果没有可用的适配器,init 函数会静默 returns false 和 History.js 未初始化.

我建议加载 jQuery adapter 并使 history 依赖于它。