SproutCore の OOP 実装を使用して名前空間付きオブジェクトを作成する方法を考えていました。私は過去に Joose を使用しており、名前空間は自動的に生成されます。次に例を示します。
Class('MyNamespace.AnotherNamespace.ClassName',{})
しかし、SproutCore では、個々のオブジェクトを自分で作成する必要があるように見えますか? ちょっと面倒な気がします。何か不足していますか?
どんな助けでも大歓迎です。
ありがとう
SproutCore の OOP 実装を使用して名前空間付きオブジェクトを作成する方法を考えていました。私は過去に Joose を使用しており、名前空間は自動的に生成されます。次に例を示します。
Class('MyNamespace.AnotherNamespace.ClassName',{})
しかし、SproutCore では、個々のオブジェクトを自分で作成する必要があるように見えますか? ちょっと面倒な気がします。何か不足していますか?
どんな助けでも大歓迎です。
ありがとう
オブジェクトでそれを行うと思いますSC.Application。
YourApp = SC.Application.create({
AnotherNamespace: SC.Object.create(), // use objects if you want to hook in observers/bindings
SimpleNotSCObjectNS: {} // for simple stuff
});
SproutCore クラスは、SC.Object.extend({...}) のように簡単に作成できます。また、任意のオブジェクトの予約されていないプロパティは、名前空間として扱うことができます。SC.Object (SC.Object.create) をドロップするだけです。hvg の回答に従って、アプリケーションがインスタンス化されたとき、または後で別のファイルで宣言できます。
MyApp.SubNamespace = SC.Object.create({
ClassName: SC.Object.extend({...}),
OtherClassName: SC.Object.extend({...})
});
これは Joosie の例よりも多くのコードではありません。名前空間が自動的に作成されないというあなたの観察は正しいですが、それには意味上の利点があります。名前空間のすべてのコンテンツを作成と同時に定義できるため、コードの集中化が促進されます。また、タイプミスした名前空間を誤って自動定義するバグを防ぎます。
ここでの重要な洞察は、アプリケーション オブジェクトが単なる名前空間ではなく、アプリケーションの機能を提供するクラスのアクティブで動的なインスタンスであるということです。アプリケーションのすべてのコードをアプリケーション オブジェクトに入れる必要があるという事実は、一種の自然な名前空間を作成し、ほとんどの場合、サブ名前空間は同じように機能することがわかります (myApp.mainPage、myApp.contentController、myApp.remoteDataSource、 myApp.statechart)。SC.Object の専用インスタンスを介してコードを専用の名前空間に編成することはもちろん大歓迎です。私もよくそうしますが、SC アプリケーションは高度に自己編成する傾向があります。