2015-01-09 3 views
2

Я создаю новое веб-приложение для нокаута, используя Require.js, Pager.js и историю .js. Я установил свою инициализацию according to the docs, но я получаю сообщение об ошибке «Невозможно получить свойство« неопределенной или нулевой ссылки »из Pager.js, когда я вызываю pager.startHistoryJs().Pager.js + History.js + Require.js - «Невозможно получить свойство« привязка »неопределенной или нулевой ссылки»

Вот мой 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); 
}); 

Какую часть мне не хватает? Я не смог найти много актуальной информации об этой ошибке.

ответ

3

Ошибка, которую вы получаете, согласуется с загрузкой History.js без загрузки адаптера. Если я посмотрю на код в history.js, я вижу, что если адаптера нет, функция init беззвучно возвращает false, а History.js не инициализируется.

Я предлагаю загрузить jQuery adapter и сделать history зависимым от этого.

0

Похоже, что вам недостает History (и, вероятно, что-то для lib/domReady!) аргумент в вашей функции require.

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(); 
});