我已经阅读了NewtonScript 程序员指南中的“视图实例化”(第 3-26 页)以及它的“声明的内幕”附录(第 A-1 页)和Newton 编程中的“声明视图”部分使用 Macintosh,第 2 版。我相信我理解它,但我似乎无法通过protoFloatNGo
单击我的protoInfoButton
.
我从以下应用程序开始(它有一个newtStatusBar
with ,当点击“About”时protoInfoButton
它会发送DoInfoAbout()
),编译tntk
,在Einstein中运行,并使用ViewFrame探索数据结构:
infoButtonView := {
_proto: protoInfoButton,
DoInfoAbout: func ()
begin
:Notify(kNotifyAlert, "MyApp", "DoInfoAbout() got called!");
end,
DoInfoPrefs: func ()
begin
:Notify(kNotifyAlert, "MyApp", "DoInfoPrefs() got called!");
end
};
mainView := {
_proto: protoFloater,
viewFlags: vApplication + vVisible + vClickable,
appSymbol: kAppSymbol,
viewJustify: vjParentFullH + vjParentFullV,
viewBounds: {left: 16, top: 16, right: -16, bottom: -16},
stepChildren: [
{
_proto: protoTitle,
title: kAppTitle
},
{
_proto: newtStatusBar,
menuLeftButtons: [infoButtonView],
menuRightButtons: []
},
],
};
{
app: kAppSymbol,
text: kAppTitle,
theForm: mainView,
}
让我看看我是否可以解释我目前对该问题的理解......我需要定义一个protoFloatNGo
模板/布局,需要在运行时将其实例化为视图,并且我需要能够获得对它的引用protoFloatNGo
查看(不是模板/布局),infoButtonView:DoInfoAbout()
以便我可以调用:Open()
它。
protoFloatNGo
没什么特别的:
{
_proto: protoFloatNGo,
stepChildren: [
{
_proto: protoTitle,
title: "About"
},
],
}
我的理解是我需要设置protoFloatNGo
在 my中设置mainView
它以便它在运行时可用,所以我尝试将它放在一个插槽 ( mainView.aboutLayout
) 中,但是当我尝试将它访问为aboutLayout
(我预期的)或GetRoot().|MyApp:MyCompany|.aboutLayout
。自然,这只会让我得到布局/模板而不是视图。因此,我也尝试将它添加到mainView.stepChildren
,但似乎无法在其中引用它GetView()
(这是 NewtonScript Programmer's Guide 中的文档,并建议使用 NTK 的“Declare To”功能)。
因此,按照“The Inside Story on Declare”(我通过使用 ViewFrame 探索 Newtoban 的运行副本确认了这一点),我模仿了stepAllocateContext
/preAllocatedContext
结构如下:
mainView := {
_proto: protoFloater,
viewFlags: vApplication + vVisible + vClickable,
appSymbol: kAppSymbol,
viewJustify: vjParentFullH + vjParentFullV,
viewBounds: {left: 16, top: 16, right: -16, bottom: -16},
stepChildren: [
{
_proto: protoTitle,
title: kAppTitle
},
{
_proto: newtStatusBar,
menuLeftButtons: [infoButtonView],
menuRightButtons: []
},
{
_proto: protoFloatNGo,
preAllocatedContext: 'aboutView,
stepChildren: [
{
_proto: protoTitle,
title: "About"
},
],
},
],
aboutView: nil,
stepAllocateContext: ['aboutView, aboutView],
};
不幸的是,在编译时,我在 Einstein 中安装软件包时收到“出现问题”,表明代码存在一些未知问题。
即使我确实让“Declare To”功能正常工作,我该如何称呼它?我可以GetRoot().|MyApp:MyCompany|.layoutView:Open();
吗?