2017-03-05 19 views
0

CreateJSを使用するAdobe AnimateCCでは、フレーム1にdisclaimer_btnというmcがあり、フレーム1にmcがあり、discTxtと呼ばれています。マウスオーバーdisclaimer_btnとgotoAndStopをフレームラベルdiscTxtに挿入したいと考えています。フレーム150についてラウンドマウスオーバーをしようとしていますが、動作していません。私の機能でアラートボックスを使用すると、それは動作します。CreateJSターゲットmcスコープの問題

エラーがUncaught TypeError: Cannot read property 'bind' of undefinedで、コードでは、私はエラーを取得するUncaught ReferenceError: fl_MouseOverHandler is not definedthis.discTxt.fl_MouseOverHandler.bind(this));前からthis.discTxtを削除した場合.bind(this));

をここを指します。

私はthis SO postthis oneを読んでいます。この場合、これらの解決策は私の役に立たないでしょう。

これはスコープの問題ですが、私はここで間違っていますか?

var frequency = 3; 
stage.enableMouseOver(frequency); 
this.disclaimer_btn.addEventListener("mouseover", this.discTxt.fl_MouseOverHandler.bind(this)); 

this.fl_MouseOverHandler = function() 
{ 
    this.discTxt.gotoAndStop("on"); 

} 

答えて

1

これは注文の問題です。あなたはthisに変数としての機能を定義する必要があるため、関数の定義は、「どんなにそれらがコードで定義されているため、掲揚関数が最初に定義されます。「掲揚されていません。2番目の例では

// Hoisted 
function myFunction() {} 

// Not hoisted 
var myFunction = function() {} 
this.myFunction = function() {} 

変数自体は定義されていますが、設定した行まではnullになります。addEventListenerをその行の下に移動して、関数が定義された後に呼び出されるように修正することができます。

ホストされたメソッドであり、それをバインドする:

btn.addEventListener("click", myFunction.bind(this)); 
function myFunction() {} 

addEventListenerの代わりにCreateJS関数であるonを使用することもできます。これには、scopeパラメータなどの構文上の砂糖が含まれています。

btn.on("click", myFunction, this); 

最後に、あなたがthisを使用して関数を定義しない場合、あなたは正しい値を渡すことを確認します。あなたの例では、thisに関数を定義しますが、それをthis.discTxtのプロパティとして渡します。 this.discTxtが別のMovieClipでなく、代わりにその関数が定義されていない場合、nullを渡します。

TLDR:

  • あなたはthisのプロパティとしての機能を定義する場合は、 `addEventListenerを
  • の下に移動したり、機能がfunction myFunction()を使用して定義されているので、それを変更し、それをバインドします。