正确使用海边/ smalltalk中的单例模式

时间:2013-09-19 13:00:26

标签: smalltalk seaside

我正在学习Smalltalk并在Seaside开发应用程序。

应用程序的第一部分将是所谓的管理方。在这部分中,我可以定义/管理允许应用程序用户选择的项目。定义的所有项目对所有用户都是相同的。所以我创建了一个名为sportsController的类。

我使用了此处定义的单例模式:smalltalk singleton pattern: how do I initialize the instance variables?

在课堂上我有:

default
 ^ Default ifNil: [ Default := self new ]

在我的实例上:

initialize 
    sports := OrderedCollection new.

sports
^ sports

当我打电话给我的观点时:

manageSports
view := SportsAdminView new model: SportsController default

方法'manageSports'被称为回调。当我运行视图时,执行以下代码:

renderContentOn: html 
html anchor
    callback: [self addSport];
     with: 'Add new sport'.
html
    unorderedList: [self model sports
            do: [:value | html
                    listItem: [self renderSport: value on: html]]].

当我运行时#sports是零。所以有一个MessageNotUnderstood通知。所以我可能做错了什么;什么?那说有更好的方法吗?主要目标是创建所有会话使用的类。

BTW目前我还没有做到持久性,其他的则是在图片中。 “真正的”持久性将在稍后处理。目前,我需要能够添加数据以开发应用程序的客户端。

1 个答案:

答案 0 :(得分:1)

在将SportsController default方法添加到实例端之前,您是否有可能第一次调用initialize?在这种情况下,您的initialize方法从未被调用。

因此,您可以通过SportsController default initialize从工作区调用一次,或者将类变量Default设置为nil并再次尝试。