Ticket #15702

ひとつイベントで二つアクションを設定できる?

Open Date: 2009-03-23 01:39 Last Update: 2009-03-23 14:58

Reporter:
Owner:
(None)
Status:
Open
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

みなさん、 ロハントです。

マスカットを使って開発しています。これらは現在のアップリケションに機能を追加するプロジェクトなんですけれども、 存在する検索画面でも一つ優先検索の処理のためボタンをを追加しています。 画面でページナビがあってグリッドで検索結果はソートすることもできます。 現在の処理では、検索ボタン押下・グリッドソート・ページナビークリックすべてで条件検索(1)が行います。 今回の優先検索ボタン押下時別の検索(2)が行います。 で2の検索を一回した後、グロッドソート・ページナビをすると同じ検索(2)再起動するハスです。 でもイベント定義で一つしかアクションを指定することはできないですと思います。イベントコードは以下とにています。

<component id="XYZ_pageNavi_01">  <event id="onclick" async="false" ref="doSearch" before="doBeforeCommon"> <header name="funcid" value="XYZ_pageNavi_01" /> <header name="eventid" value="onclick" />  </event> </component>

同じ用にグロッドソートのイベント定義です。ここに指定してあるdoSearchは先ほど説明した(1)の検索です。 新しい優先検索(2)はdoRefreshです。 私は,doRefreshのアクションを同じコンポーネントで定義したいです。 つまり条件検索ボタンを押下(doSearchアクション)すれば、グリッドソートとかページナビーも同じアクションを呼びだすようにしたいです。 優先検索ボタンを押下(doRefreshアクション)すれば、グリッドソートとかページナビーも同じアクションを呼びだすようにしたいです。

ご存じの方がいれば教えていただけるとうれしいです。 納品日は明日なので早めにご返事待っております。

ありがとうございます。 ーロハント

Ticket History (3/6 Histories)

2009-03-23 01:39 Updated by: rohant18
  • New Ticket "ひとつイベントで二つアクションを設定できる?" created
2009-03-23 01:51 Updated by: rohant18
Comment

もし、ref属性でイベントRefを指定するより、start,beforeの属性で指定するメッソドでイベントRef(アクション)を設定出来れば問題解決できると思います。メッソドでフラグでどの検索を以前やったのかを判断できるから。。。 そいう方法はありますかね。。。。。

2009-03-23 13:19 Updated by: shiozaway
Comment

マスカットで1つのコンポーネントに2つのアクションを実行するのは、難しいです。

2つのボタンに別々のアクションを設定する方法をお勧めします。

また、eventRefを指定する方法よりもstart、beforeの属性で指定する方法をお勧めします。

こちらの方法だと、start属性にてdoSearchアクションかdoRefreshアクションのどちらを実行するか判断する処理を設定すれば、 2つのアクションを設定することはできると思います。

2009-03-23 13:45 Updated by: rohant18
Comment

了解です。 2つのボタンに別々のアクションを設定する方法は無理ですなぜならば、同じグリッドのページナビとグリッドソートは両方に使っているからです。

2番目のお勧めはたぶん実装可能と思います。 そこに疑問があります。 _e.xmlには eventRefは ref属性でできますがでも、startとbeforeでjavascriptの関数を呼びだすのであそこでeventRefをどやって指定できますか。

2009-03-23 14:12 Updated by: kazatoh
  • Priority Update from 9 - Highest to 5 - Medium
Comment

レイアウトの読み込み時に event から eventRef への参照は解決されます。 実行時には eventRef は存在しないため、JavaScript 関数 (start, finish) から直接 eventRef を呼び出すことはできません。

以下の手順を試してください。なお、マスカットプロジェクトは以下の使い方を正式にはサポートしません。

  1. イベント定義 (layout_e.xml) にボタンの "onclick" 以外のイベントを記述する。ここでは "onclick", "A", "B" の 3つのイベントを設定します。
  2. "onclick" はローカルイベントとします。start 関数で以下のように記述することで、条件に応じて "A", "B" のイベントを実行することができます。
  3. "A", "B" のイベント定義は eventRef を参照しても構いません。
    function myButton_onclick_start() {
    	var layout = maskat.app.getLayout("myLayout");
    	var button = layout.getWidget("myButton");
    
    	if (confirm("Do you want to raise event 'A' ?")) {
    		event = new maskat.event.Event(layout, button, "A");
    	} else {
    		event = new maskat.event.Event(layout, button, "B");
    	}
    	layout.dispatchEvent(event);
    }
    

私たちはボランティアで質問に答えているので、ロハントさんの納期については何の保証もできません。 あしからずご了承ください。 あしからず

2009-03-23 14:58 Updated by: kazatoh
Comment

上記と全く同じプログラムを、もっと簡単に書く方法がありました。

function myButton_onclick_start() {
	var layout = maskat.app.getLayout("myLayout");
	var button = layout.getWidget("myButton");

	if (confirm("Do you want to raise event 'A' ?")) {
		button.notifyEvent("A");
	} else {
		button.notifyEvent("B");
	}
}

Attachment File List

No attachments

Edit

Please login to add comment to this ticket » Login