2012-05-02 11 views
3

電話帳で「これ」とは何ですか?私は、アプリケーションと私は、ローカルのjavascriptを持っているアプリケーションで働いていますリモートJavaScriptは、サーバーから引っ張られた。私はすべてのjavascriptを生成するためにcoffeescriptを使用しています。「これ」が電話帳

%script{:src=>"javascripts/file1.js"} 
%script{:src=>"http://192.168.5.205:3000/assets/file2.js"} 

file1.js.coffee:

@myObj1 = property: true 

file2.js.coffee:

両方のファイルは、次のようなHAMLにより生成アプリのインデックスヘッダに含まれています

@myObj2 = property: true 

myObj1は世界中で利用でき、ちょうどとして参照できます0であるが、myObj2document.myObj2でのみ利用可能であり、単にmyObj2として参照することはできません。何が起こっている?

+0

あなたの問題はあなたの関数が '=>' not ' - >'だと思います。 '@'は 'this 'の代わりに' self'を参照する、 'var self = this;'あなたの純粋なjavascriptのために 'this'のコンテキストを自動的に維持します。 – asawyer

答えて

6

さて、あなたはこれを言う場合:file2.js.coffeeが実行されたときに

@myObj2 = property: true 

、あなたは他のどこでもmyObj2document.myObj2として参照する必要があり、その後、thisdocumentでなければなりません。この種のことは、コードが$(document).ready()またはそれに類する方法(たとえば、http://jsfiddle.net/ambiguous/6DFK9/)で実行された場合に発生します。

あなたは何かがグローバルになりたい場合は、あなたが本当にそれについて明示的およびwindow使用する必要があります。

# in file1.js.coffee: 
window.myObj1 = property: true 

# in file2.js.coffee: 
window.myObj2 = property: true 

あなたはもっと重要なのは、呼び出し元のコンテキストを心配し、する必要はありません。そのように、あなたの意図を明示的になり、あなたがバグを修正しようとしているときに、thisが6ヶ月以内であると想定されるものを困惑させる必要はありません。あなたが言っていることを言いなさい:あなたがそれをグローバルにしたいならば、windowに入れてください。

関連する問題