0

私は次のように解決しようとしています。

私はビューを呼び出します:

var loader = new LoadingView();

そのビューにアタッチされた関数により、新しいオブジェクト「スピナー」が作成されます

loader.showLoader()

次に、そのオブジェクトスピナーを非表示にする関数を呼び出すことができることを今望んでいます

loader.hideLoader();

ただし、hideLoader は「スピナー」オブジェクトにアクセスできません。

なんで?

ビューコード:

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

2 に答える 2

1

スピナー オブジェクトを のプロパティとして設定する必要がありますthis

showLoader: function () {
    this.spinner = new Spinner(this.opts);
    this.spinner.spin(this.el); // not sure if you can chain these calls
},
于 2013-11-12T16:49:16.980 に答える
1

これは、ローカル スコープで定義spinnerしたためです。これは、 のローカル スコープ内の変数であり、でアクセスしようとしているプロパティとしてコンテキストにshowLoader関連付けられていないため、次のように変更してみてください。thishideLoader

 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);     
    },
于 2013-11-12T16:49:35.617 に答える