2016-12-30 7 views
1
私はプロジェクトのためのスクリプトを書いてい

ではない、それが崩壊またはhamdurgerのアイコンをクリックの上にサイドバーを開くための機能を持っていますが、私はクリックしたときに、それは私は以下の通りですCollapseSidebarが機能

TypeError: this.CollapseSidebar is not a function

エラー提供します私のコード:

(function($) { 
    'use strict'; 
    var Prtm = { 
     Constants: { 
      LEFTMARGIN:'315px', 
      COLLAPSELEFTMARGIN: '63px', 
     }, 
     PrtmEle:{ 
      BODY: $('body'), 
      SIDEBAR: $('.prtm-sidebar'), 
      SIDENAV: $('.sidebar-nav'), 
      MAIN: $('.prtm-main'), 
      HEADER: $('.prtm-header'), 
      CONTENTWRAP: $('.prtm-content-wrapper'), 
      CONTENT: $('.prtm-content'), 
      PRTMBLOCK: $('.prtm-block'), 
      FOOTER: $('.prtm-footer'), 
      HAMBURGER: $('.prtm-bars'), 
     }, 
     Init:function(){ 
      this.BindEvents(); 
     }, 
     BindEvents:function(){ 
      this.PrtmEle.BODY.on('click',this.PrtmEle.HAMBURGER,function(){ 
       this.CollapseSidebar(); 
      }); 
     }, 
     CollapseSidebar: function(){ 
      this.PrtmEle.HAMBURGER.toggleClass("prtm-sidebar-closed is-active"); 
      this.PrtmEle.BODY.toggleClass("prtm-sidebar-closed is-active"); 
      this.PrtmEle.SIDEBAR.toggleClass('collapse'); 
     }, 
    }; 
    Prtm.Init(); 
})(jQuery); 

私はそれが正常に動作this.CollapseSidebarPrtm.CollapseSidebarに変更。私がここで間違っていること、それがどのように解決できるのか?

答えて

1

なぜ機能しないのですか?function()は、をバインドしているためです。あなたが行うことができます

ことの一つは結合しないArrow functionを使用することです独自のthis - このような:

BindEvents:function(){ 
    this.PrtmEle.BODY.on('click',this.PrtmEle.HAMBURGER,() => { 
     this.CollapseSidebar(); 
    }); 
} 

インサイドあなたの機能thiswindowを参照しますクリック - ので、どちらかあなたが作成することができますそれは作品

BindEvents:function() { 
    let $this = this; 
    this.PrtmEle.BODY.on('click',this.PrtmEle.HAMBURGER,function() { 
     $this.CollapseSidebar(); 
    }); 
} 
+1

ありがとう:以下または矢印機能を使用するなどの一時的な変数しかし、私は本当にここで何が意味するのか、それがどのように機能するのかを知りたがっています。 * arrow function *と呼ばれる –

+0

は 'function(){'と同じ働きをしますが、 'this'や' args'を与えないことを除けば - 上記の文書をリンクしています:) – kukkuz