2013-01-08 40 views
1

我不知道如何使用SproutCore的的OOP實現來創建一個命名空間對象。我已經在過去與Joose工作和命名空間是自動生成的,例如:SproutCore的命名空間

Class('MyNamespace.AnotherNamespace.ClassName',{}) 

但在SproutCore的,它看起來像您可能需要創建單個對象自己呢?我覺得這有點乏味。我錯過了什麼嗎?

任何幫助將不勝感激。

感謝

回答

1

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應用往往自我組織,以高度。

2

我覺得你與SC.Application對象做到這一點。

YourApp = SC.Application.create({ 
    AnotherNamespace: SC.Object.create(), // use objects if you want to hook in observers/bindings 
    SimpleNotSCObjectNS: {} // for simple stuff 
}); 
+0

這正是我怎麼做我的應用程序。 –