2

我正在使用 Require.js、Pager.js 和 History.js 设置一个新的 Knockout Web 应用程序。我已经根据文档设置了我的初始化,但是当我调用 Pager.js 时,我收到“无法获取未定义或空引用的属性‘绑定’”错误pager.startHistoryJs()

这是我的 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();
});

这是 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);
});

我错过了什么?我无法找到有关此错误的很多相关信息。

4

2 回答 2

3

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

我建议加载jQuery 适配器history依赖它。

于 2015-01-09T17:22:20.040 回答
0

看起来您在 require 函数中缺少History(并且可能是 for 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();
});
于 2015-01-09T15:17:56.567 回答