Backbone.Paginator: невозможно прочитать свойство 'requestPager'
Аналогично вопросу 21560374.
Я пытаюсь реализовать Backbone.Paginator версии 0.8, и при загрузке страницы я получаю сообщение об ошибке: Uncaught TypeError: Невозможно прочитать свойство 'requestPager' из неопределенного.
Сначала я сослался на файл CDNJS, а затем скачал необработанный код и поместил его в app/assets/javascripts. Я также потребовал это в application.js '//= require backbone.paginator.min.js'.
Вот мой код раздела, расположенный в application.html.erb:
<head>
<title>D2jive</title>
<link href='http://fonts.googleapis.com/css?family=Audiowide' rel='stylesheet' type='text/css'>
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<%= stylesheet_link_tag "application", media: "all" %>
<%= javascript_include_tag "application" %>
<script type="text/javascript" src="assets/backbone.paginator.min.js"></script>
<%= csrf_meta_tags %>
</head>
В окне я создаю экземпляр моего маршрутизатора:
window.D2Jive = {
Views: {},
Routers: {},
Events: {},
Models: {},
Collections: {},
initialize: function() {
D2Jive.router = new this.Router();
Backbone.history.start({pushState: true});
},
};
Находясь в моем маршрутизаторе, я ссылаюсь на мою PaginatedCollection:
this.collection = new D2Jive.Collections.PaginatedCollections( [], { location: location });
Затем, где появляется фактический код для Backbone.Paginator.requestPager, появляется ошибка.
D2Jive.Collections.PaginatedCollection = Backbone.Paginator.requestPager.extend({
initialize: function(attributes, options){
this.city = options.location;
},
Я все еще привыкаю к JavaScript, но кажется, что код Backbone.Paginator загружается после того, как функция инициализации окна создает новый маршрутизатор и проверяет созданную мной коллекцию Backbone.Paginator. Я просто не уверен, как этого избежать.
После появления ошибки в консоли я могу загрузить Backbone.Paginator.requestPager.
Backbone.Paginator.requestPager.extend
function (protoProps, staticProps) {
var parent = this;
var child;
// The constructor function for the new subclass is either defined by you
// (the "constructor" property in your `extend` definition), or defaulted
// by us to simply call the parent's constructor.
if (protoProps && _.has(protoProps, 'constructor')) {
child = protoProps.constructor;
} else {
child = function(){ return parent.apply(this, arguments); };
}
// Add static properties to the constructor function, if supplied.
_.extend(child, parent, staticProps);
// Set the prototype chain to inherit from `parent`, without calling
// `parent`'s constructor function.
var Surrogate = function(){ this.constructor = child; };
Surrogate.prototype = parent.prototype;
child.prototype = new Surrogate;
// Add prototype properties (instance properties) to the subclass,
// if supplied.
if (protoProps) _.extend(child.prototype, protoProps);
// Set a convenience property in case the parent's prototype is needed
// later.
child.__super__ = parent.prototype;
return child;
}
Любая помощь будет высоко ценится!
1 ответ
Перед запуском приложения обязательно включите библиотеку paginator. Причина, по которой вы можете получить доступ requestPager
после появления ошибки, скорее всего, потому что на этом этапе библиотека была загружена.
Чтобы убедиться, что это не проблема с вашим кодом, попробуйте включить код магистральной страницы в страницу <head>
раздел.
Редактировать на основе комментария:
Вам нужно изменить свой "app/assets/javascripts/application.js", чтобы он включал файлы в правильном порядке. Что-то вроде:
//= require jquery
//= require jquery_ujs
//= require underscore
//= require backbone
//= require bacbkone.paginator.min
//= require_tree .
Если вы просто полагаетесь на require_tree
чтобы включить файлы, они не обязательно будут включены в правильном порядке, что и происходит.
Кроме того, поскольку Backbone paginator включается в файл приложения, он больше не должен находиться в.