簡體   English   中英

正確地將PagerJS與History.js集成

[英]Properly integrating PagerJS with History.js

我正在嘗試使用Knockout,pagerjs和history.js設置SPA。 但是,當我單擊包含data-bind="'page-href': '/somepath'" ,出現JS錯誤:

對象函數History(){[本機代碼]}沒有方法'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的正確方法是什么?

幸運的是,我找到了這個單元測試代碼 這是我學到的:

  1. 您必須具有<base href="..."/>來指定您的基本URL。
  2. 您不應包含Git中的raw history.js文件,而應使用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;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM