我不知道如何使用SproutCore的的OOP實現來創建一個命名空間對象。我已經在過去與Joose工作和命名空間是自動生成的,例如:SproutCore的命名空間
Class('MyNamespace.AnotherNamespace.ClassName',{})
但在SproutCore的,它看起來像您可能需要創建單個對象自己呢?我覺得這有點乏味。我錯過了什麼嗎?
任何幫助將不勝感激。
感謝
我不知道如何使用SproutCore的的OOP實現來創建一個命名空間對象。我已經在過去與Joose工作和命名空間是自動生成的,例如:SproutCore的命名空間
Class('MyNamespace.AnotherNamespace.ClassName',{})
但在SproutCore的,它看起來像您可能需要創建單個對象自己呢?我覺得這有點乏味。我錯過了什麼嗎?
任何幫助將不勝感激。
感謝
SproutCore類同樣容易創建:SC.Object.extend({...})。任何對象的任何未保留的屬性都可以視爲一個名稱空間。只需放入SC.Object(SC.Object.create)即可。每HVG的回答,您可以在另一個文件中聲明它的應用程序被實例化時,或更高版本:
MyApp.SubNamespace = SC.Object.create({
ClassName: SC.Object.extend({...}),
OtherClassName: SC.Object.extend({...})
});
這不是比你Joosie例子太多的代碼。該命名空間不會自動爲您創建你的觀察是正確的,但有語義的好處:你可以在你創建的同時,鼓勵代碼的集中定義所有的命名空間中的內容;它可以防止意外自動定義錯誤命名空間的錯誤。
這裏的關鍵見解是,你的應用程序對象不只是一個命名空間,它是提供應用程序-Y功能的類的一個積極的,動態的實例。所有的應用程序代碼應該在應用程序對象去的事實,創造了某種天然的命名空間,我發現大多數的時間我的子命名空間的工作方式相同(myApp.mainPage,myApp.contentController,myApp.remoteDataSource, myApp.statechart)。你是當然歡迎通過SC.Object的專用實例來組織你的代碼到專用的命名空間,我經常這樣做,但SC應用往往自我組織,以高度。
我覺得你與SC.Application
對象做到這一點。
YourApp = SC.Application.create({
AnotherNamespace: SC.Object.create(), // use objects if you want to hook in observers/bindings
SimpleNotSCObjectNS: {} // for simple stuff
});
這正是我怎麼做我的應用程序。 –