NewtonScript プログラマー ガイドの「ビューのインスタンス化」(p. 3-26) と、その「宣言の裏話」付録 (p. A-1) およびNewton のプログラミングの「ビューの宣言」セクションを確認しました。 Macintosh を使用して、第 2 版。私はそれを理解していると信じていprotoFloatNGo
ますが、私のprotoInfoButton
.
次のアプリケーション ( 「About」をクリックすると送信される を含むnewtStatusBar
)から始めて、 でコンパイルし、 Einsteinで実行し、ViewFrameでデータ構造を調べています。protoInfoButton
DoInfoAbout()
tntk
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
に設定する必要があるため、スロット(私が期待したもの)または。当然、それはレイアウト/テンプレートのみを取得し、ビューは取得しません。それで、私もそれをに追加しようとしましたが、 で参照する方法がないようです(これは NewtonScript Programmer's Guide に記載されており、NTK の「Declare To」機能を使用することを提案しています)。mainView
mainView.aboutLayout
aboutLayout
GetRoot().|MyApp:MyCompany|.aboutLayout
mainView.stepChildren
GetView()
そこで、「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();
か?