NativeScriptプロジェクトのカスタムコンポーネントからメソッドを公開したいと考えています。NativeScriptカスタムコンポーネントからメソッドを公開するにはどうすればよいですか?
MyComponent.xml <StackLayout loaded="loaded"> ...UI markup... </StackLayout>
MyComponent.ts export function loaded(args) { //do stuff }; export function myCustomMethod() { //do more stuff };
MyPage.xml <Page xmlns:widget="..." loaded="loaded"> <widget:MyComponent id="myComponent" /> </Page>
MyPage.ts 0123:ここでは概念的な設定です export function loaded(args) { let page = <Page>args.object; let widget = page.getViewById("myComponent"); widget.myCustomMethod(); //<--THIS DOES NOT WORK }
質問:カスタムコンポーネントでmyCustomMethod
を適切に公開して、ホスティングページがJavaScript経由でアクセスして呼び出す方法を教えてください。
デフォルトでは、ページ上のカスタムコンポーネントへの参照を取得しようとすると、カスタムコンポーネントのレイアウトコンテナへの参照が返されます(この例では、StackLayout
)。
MyComponent.ts export function loaded(args) { let stackLayout = <StackLayout>args.object; //Layout container stackLayout.myCustomMethod = myCustomMethod; //Attach custom method to StackLayout }
それはハックの少しですが、それは働いている:
ので、回避策として、私はこれをやっています。レイアウトコンテナのスーパークラスを作成するのに手間がかからないカスタムコンポーネントメソッドを公開する方法はありますか?より正確に
UPDATE
、カスタムコンポーネントは、インスタンスのプロパティを持っているので、最終的な解決策は、シナリオなどをサポートする必要があるだろう...
MyComponent.ts let isStarted = false; export function loaded(args){ // do stuff }; export function myCustomMethod() { isStarted = true; };
私はこれに興味があります –
Todd any solution nowaday? –
TypeScriptに切り替えることで、これはかなり自然に/解決しやすくなりました。今日私は "ビジュアル"カスタムコンポーネントを持っている場合、私は通常、StackLayoutを拡張し、新しいパブリックメソッド/プロパティを追加します。ですから、NativeScriptでTypeScriptを使用することをお勧めします。 – Todd