我想知道如何使用 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 应用程序倾向于高度自组织。