2016-04-07 4 views
0

JSONJavaObjectに関数を追加しようとしていますが、これをxpageのコントロールから呼び出しようとしています。jsonjavaオブジェクトに関数を追加してxpagesコントロールから呼び出す

これまでのところ、私は持っている:私は、Notesビュー内の列からキーと値のペアを追加し、最初の行で

json = (JsonJavaObject) JsonParser.fromJson(factory, colJson);      
String func = "function() { alert('you clicked?'); }";       
json.put("onClick", new JsonReference(func)); 

を。 2行目では、関数を文字列として定義しています。 最後の行で、変換された文字列を関数としてjsonjavaオブジェクトに配置します。私は、例えばに機能をバインド http://camerongregor.com/2016/01/19/doublequoteavoidance/

次のステップ:

私は次のブログ記事では、この読ん以下のようなボタンコントロール:

objはSSJSのJSONJavaオブジェクトの表現です。

しかし成功しません。誰でも私はどのようにオブジェクト内の関数を呼び出すことができます知っている?

答えて

0

私は願っていますここで意味をなさない、明らかにするものがあれば教えてください。

ボタンイベントのクライアントサイドスクリプトを単純に出力しようとしている場合は、JsonReferenceをまったく使用する必要はありません。あなたは単に文字列を使うことができます。

私のブログの記事では、JsonReferenceを使用する必要がある理由を明確にしていない可能性があります。カスタムUIComponentをレンダリングするプロセスでこのメソッドを使用していましたが、このプロセスの一部ではJsonオブジェクトのクライアントサイドを生成する必要がありました。これを行うために、JsonJavaObjectを作成した後、 'toJson'メソッドを使用して文字列に変換するように依頼しました。私の問題は、オブジェクト全体を文字列にするように要求したときに、文字列であったオブジェクトのすべてのプロパティが二重引用符で始まり、終わります。関数であることを意図したプロパティが ""で始まったり終わったりしなかったことを保証する必要がありました。 JsonReferenceを使用することで、JsonGeneratorはこれらの二重引用符を含めないようにする意向を表明しました。

あなたの場合は、onClickで何が起こるかを動的に判断しようとしているように見えます。これを行うには、単にJsonReferenceの代わりにStringを使用します。 'function(){}'は、イベントハンドラがページの最後にレンダリングされるときに生成されるため、不要です。例については

ここでは

JsonJavaObject obj = new JsonJavaObject(); 
String func = " alert('you clicked?'); "; 
obj.put("onClick", func); 
return obj; 

そして、ここでJSON Javaオブジェクトになり、ボタンのようになります。

<xp:button id="button1" value="Alert Me"> 
    <xp:eventHandler event="onclick" submit="false" 
     script="#{javascript: myBean.myObject.get('onClick')}"> 
    </xp:eventHandler> 
</xp:button> 

これはあなたに見ての最終結果与えるべき「あなたがクリックしましたの?」警戒。

あなたはまた、「ソースの表示」や、お気に入りのWebブラウザ開発ツールを使用して、これは、すべてのページの終わり近くにスクリプトブロックで生成されたかを調べることができます。

function view__id1__id2_clientSide_onclick(thisEvent) { 
alert('you clicked?'); 

} 

XSP.addOnLoad(function() { 
XSP.attachEvent("view:_id1:_id2", "view:_id1:button1", "onclick",  
    view__id1__id2_clientSide_onclick, false, 2); 
}); 

私はどちらかといえばのISNを知ってみましょうそれが助けてくれることを願っています。

0

obj.onClickは、すでにJavaクラスから返された関数のハンドルを提供しますか?それがないなら、あなたはJavaScriptでご利用いただけますcallまたはapplyメソッドを使用してそれを呼び出すことができる必要があります:これら二つの方法について

obj.onClick.call(); 
obj.onClick.apply(); 

詳細はここで見つけることができます:What is the difference between call and apply?

+0

obj.onClickのように見えますが、この機能に対処できません。両方のメソッドを試しても何も起こりません(警告関数が呼び出されます)。 –

+0

obj.onを画面(例:計算テキスト)に印刷すると、[email protected]と表示されます。それで、そこには、確立されたjsonreferenceへのフックがあるように見えます。それを利用する方法がわからない –

+0

Cameronの記事で説明したように、JsonJavaObjectを返す前に文字列にシリアル化する必要があります。return JsonGenerator.toJson(JsonJavaFactory.instance、o、false); –

関連する問題