规范 - 我想替换 SpPanedLayout 中的第一个演示者
Spec - I want to replace the first presenter in a SpPanedLayout
是否可以不重建整个演示器?
我正在尝试这段代码,但它无法正常工作:
self layout remove: (self layout children first).
self layout add: aNewPresenter.
其实是去掉了presenter,但是新的presenter不是放在首位,而是放在末尾。
在 Spec2 中,所有布局都是动态的(意味着它们可以在运行时修改),但每个布局都有不同的 API,因此需要以不同的方式修改它们。特别是,SpPanedLayout
只有两个 children:first 和 second(它们可以垂直显示 - 从上到下- 或水平方向 - 从左到右 -)。
这意味着与 SpBoxLayout
不同,在 SpPanedLayout
中不需要使用 #add:
和 #remove:
消息,并且不会总是产生所需的结果,并且由于 #add:
将尝试在列表末尾添加演示者,如果成功,它将始终是第二个。
相反,你可以只设置 children,你将在你想要的地方有效地替换演示者。
假设您安装了 gtk 后端,此代码:
presenter := SpPresenter new.
presenter application: (SpApplication new useBackend: #Gtk).
presenter layout: (SpPanedLayout newHorizontal
first: (presenter newLabel label: 'I will replace this');
second: (presenter newLabel label: 'Powered by Pharo');
yourself).
presenter openWithSpec title: 'Example replace paned presenter'.
presenter layout
first: (presenter newImage image: (presenter application iconNamed: #pharoBig)).
将在运行时用 pharo 徽标替换标签“我将替换这个”。
它会产生这个输出:
是否可以不重建整个演示器?
我正在尝试这段代码,但它无法正常工作:
self layout remove: (self layout children first).
self layout add: aNewPresenter.
其实是去掉了presenter,但是新的presenter不是放在首位,而是放在末尾。
在 Spec2 中,所有布局都是动态的(意味着它们可以在运行时修改),但每个布局都有不同的 API,因此需要以不同的方式修改它们。特别是,SpPanedLayout
只有两个 children:first 和 second(它们可以垂直显示 - 从上到下- 或水平方向 - 从左到右 -)。
这意味着与 SpBoxLayout
不同,在 SpPanedLayout
中不需要使用 #add:
和 #remove:
消息,并且不会总是产生所需的结果,并且由于 #add:
将尝试在列表末尾添加演示者,如果成功,它将始终是第二个。
相反,你可以只设置 children,你将在你想要的地方有效地替换演示者。
假设您安装了 gtk 后端,此代码:
presenter := SpPresenter new.
presenter application: (SpApplication new useBackend: #Gtk).
presenter layout: (SpPanedLayout newHorizontal
first: (presenter newLabel label: 'I will replace this');
second: (presenter newLabel label: 'Powered by Pharo');
yourself).
presenter openWithSpec title: 'Example replace paned presenter'.
presenter layout
first: (presenter newImage image: (presenter application iconNamed: #pharoBig)).
将在运行时用 pharo 徽标替换标签“我将替换这个”。
它会产生这个输出: