Я пытаюсь понять, как это происходит.
Я называю вид:
var loader = new LoadingView();
функция, прикрепленная к этому представлению, создает новый объект 'spinner'
loader.showLoader()
То, что я сейчас надеюсь, что я могу затем вызвать функцию, которая скрывает этот объект spinner
loader.hideLoader();
Однако hideLoader не имеет доступа к объекту "spinner".
Зачем?
просмотреть код:
define([
'jquery',
'underscore',
'backbone',
'spinner',
], function($, _, Backbone, Spinner){
var LoadingView = Backbone.View.extend({
el: '#loader',
// View constructor
initialize: function() {
this.opts = {
zIndex: 2e9, // The z-index (defaults to 2000000000)
top: '20', // Top position relative to parent in px
left: 'auto' // Left position relative to parent in px
};
_.bindAll(this, 'showLoader', 'hideLoader');
},
showLoader: function () {
var spinner = new Spinner(this.opts).spin(this.el);
},
hideLoader: function () {
var self = this;
console.log(self)
this.spinner.stop();
}
}); // end loaderview
return LoadingView;
});
Это связано с тем, что вы определили spinner
в локальной области, это просто переменная в локальной области showLoader
и не привязана к this
контексту как свойство, к которому вы пытаетесь получить доступ в hideLoader
Поэтому попробуйте изменить его на
showLoader: function () {
this.spinner = new Spinner(this.opts).spin(this.el); //assuming spin returns the spinner object itself if not. do the below
//this.spinner = new Spinner(this.opts);
//this.spinner.spin(this.el);
},
Вам нужно установить объект spinner как свойство this
:
showLoader: function () {
this.spinner = new Spinner(this.opts);
this.spinner.spin(this.el); // not sure if you can chain these calls
},