5

みなさん、こんにちは: 名前空間を作成しようとしているので、アプリケーション全体でさまざまな coffeescript ファイルのクラスを使用できます (少なくとも、名前空間を使用する目的については理解しています)。

ここで非常に良い例を見つけました: Classes within Coffeescript 'Namespace'

抜粋:

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

ただし、これを実装すると、コンソールで名前空間が定義されていません。

私の名前空間は、上記の例とまったく同じように実装されています。私の名前空間の定義は、どうやらcoffeescriptによって認識されていないようです。

何か案は?ここでバージョン管理の問題が発生する可能性がありますか?

前もって感謝します!!!

4

1 に答える 1

8

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.coffeeファイル(util.coffeeまたは...)がありnamespaceます。しかし、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

(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関数はどこでも使用できるようになります。

于 2012-05-07T17:18:22.077 に答える