【问题标题】:SproutCore NamespacesSproutCore 命名空间
【发布时间】:2012-12-22 15:56:33
【问题描述】:

我想知道如何使用 SproutCore 的 OOP 实现来创建命名空间对象。我过去曾与 Joose 合作过,命名空间是自动生成的,例如:

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

但在 SproutCore 中,您可能必须自己创建单个对象?我觉得这有点乏味。我错过了什么吗?

任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: sproutcore


    【解决方案1】:

    我认为您可以使用 SC.Application 对象。

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

    【讨论】:

    • 这正是我在应用程序中的做法。
    【解决方案2】:

    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 应用程序倾向于高度自组织。

    【讨论】:

      猜你喜欢
      • 2010-10-20
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 2021-01-12
      相关资源
      最近更新 更多