2012-05-07 19 views
4

こんにちは皆:私は、私は、少なくとも私の理解は、あなたが名前空間を使用するものであること(私のアプリケーション全体で異なるCoffeeScriptのファイルでクラスを使用することができ、名前空間を作成しようとしていますキャッチされていないにReferenceError:CoffeeScriptの中で名前空間をするとき、名前空間が定義されていない

)のために、私はここに非常に良い例が見つかりました:Classes within Coffeescript 'Namespace'

抜粋:

namespace "Project.Something", (exports) -> 
     exports.MyFirstClass = MyFirstClass 
     exports.MySecondClass = MySecondClass 

しかし、私はこれを実装するとき、私は取得しています:名前空間は私のコンソールで定義されていません。

私の名前空間は、それが上記の例では見え正確にどのように実装されています。私の名前空間の定義は、何とかcoffeescriptによって認識されていないようです。

ここに何かバージョン管理の問題があるかもしれませんか?

ありがとうございます!その質問から

答えて

7

namespace機能:

namespace = (target, name, block) -> 
    [target, name, block] = [(if typeof exports isnt 'undefined' then exports else window), arguments...] if arguments.length < 3 
    top = target 
    target = target[item] or= {} for item in name.split '.' 
    block target, top 

はCoffeeScriptのの一部ではない、あなたはヘルパーを自分で定義する必要があります。おそらくあなたはnamespace定義を含むnamespace.coffeeファイル(またはutil.coffeeか...)を持っていると思いますので、すべてのファイルでそれを繰り返したくはありません。しかし、あなたはnamespace関数をグローバル名前空間に入れるという問題が残されています。あなたはdo it by hand可能性:

namespace = (target, name, block) -> 
    [target, name, block] = [(if typeof exports isnt 'undefined' then exports else window), arguments...] if arguments.length < 3 
    top = target 
    target = target[item] or= {} for item in name.split '.' 
    block target, top 

(exports ? @).namespace = namespace 
# or just (exports ? @).namespace = (target, name, block) -> #... 

デモ:http://jsfiddle.net/ambiguous/Uv646/

それとも、ファンキー取得し、グローバルスコープに自分自身を置くためにnamespaceを使用することができます。

namespace = (target, name, block) -> #... 
namespace '', (exports, root) -> root.namespace = namespace 

デモ:http://jsfiddle.net/ambiguous/3dkXa/

ます一度あなたのnamespace関数はどこでも利用できるはずです。

+0

驚くばかりです、それは私が探していたものです。ありがとう!私はまだJSに新しいので、多くの助けになりました! – cpow

関連する問題