Grid、ListViewコンポーネントは、コンテンツが表示される形態について、コンテンツエディタ形態を使って設定できるようにサポートします。 これにより、コンポーネントやデータを様々な形で示すことができます。 nexacroモジュルデベロッパーでは、モジュール開発時にコンテンツエディタを設定する機能を提供しています。
MetaInfo contentsプロパティに設定する方法は、基本的に提供される3種類のコンテンツエディタを使用します。コンテンツエディタプロジェクトを作成して設定すると、オブジェクトcontenteditorプロパティに設定することができます。
MetaInfo contentsプロパティに設定
Contentsプロパティを設定すると、デフォルトで提供される3種類のContent Editorをオブジェクトプロパティの設定時に使用することができます。
contentsプロパティの設定
Component Wizardで設定
1
オブジェクト生成時にContents項目の設定値を「true」に変更します。
2
[Next]ボタンをクリックして、Contents FormatとContents Typeを設定します。
設定されたプロパティ値は、MetaInfoで確認できます。
3
生成されたオブジェクトのClass Definitionを確認します。
下記のようにContents Typeによって関連関数が自動生成されます。
MetaInfoで設定
1
Project ExplorerでMetaInfo項目の下のオブジェクトを選択します。
2
プロパティウィンドウでcontentsプロパティ値を「true」に設定します。
3
Contentsプロパティ項目のボタンをクリックして、ContentsInfo Editorを実行します。
4
Contents FormatとContents Typeを設定します。
5
生成されたオブジェクトのClass Definitionに必要なコードを追加します。
MetaInfoでcontentsプロパティを変更した場合には、自動でコードが追加されません。必要なコードを直接追加する必要があります。
Contents Format、Contents Typeの設定
Contentsプロパティ値を「true」に設定すると、Contents FormatとContents Typeを設定できます。Contents Formatによって、選択できるContents Typeの設定が異なります。
Contents Format | Contents Type |
---|---|
xml | contents, formats |
json | contents |
objectitem | contents, formats |
Contents Format
処理するプロパティ値の形式を設定します。選択したプロパティ値によってモジュールのインストール後に使用できるエディタが変わります。
Contents Type
プロパティ値を「formats」に設定する場合には、formatidを使って1つ以上のデータを設定することができます。Component Wizardに設定した場合には、下記のようにformats、formatidプロパティに関連する関数が設定されます。
モジュールのインストール後に使用できるエディタの上段にFormatを追加できるボタンが追加されます。追加したFormatを削除したり名前を変更することできます。
Contents Itemの設定
Contents Formatの値を「objectitem」に設定した場合には、Contents Itemを設定する必要があります。
属性名 | 説明 |
---|---|
TagName | Design Source生成時に使用するタグ名を設定します。 |
TypeName | Basic Contents Editorで選択した項目のプロパティを表示するためのクラスを設定します。 最上位のアイテムは現在のオブジェクトクラスを選択し、下位のアイテムは適切なクラスを選択します。 |
Minimum Occurs | 1以上の値を指定した場合は、該当個数以上の項目を設定する必要があります。 値が設定されなければ「0」となり、最小個数制限はありません。 |
Maximum Occurs | 1以上の値を指定した場合は、該当個数以下の項目を設定する必要があります。 値が設定されなければ「0」となり、最小個数制限はありません。 |
Minimum OccursもしくはMaximum Occursを設定時にidプロパティ値を指定して設定できます。
属性値 | 説明 |
---|---|
id 속성값 | 設定したidプロパティ値の1項目のみ設定できます。 例)btnContent |
id 속성값 | id 속성값 | 「|」区切り文字を使用してプロパティ値を設定します。 2つ以上のidプロパティ値の1つの項目のみ設定できます。 例)btnContent|btnFotmat |
id 속성값, id 속성값 | 「,」区切り文字を使用してプロパティ値を設定します。 2つ以上のidプロパティ値の設定した個数だけ項目を追加できます。 Minimum Occursプロパティは、該当idプロパティ値で設定した数を必須で追加する必要があります。 Maximum Occursプロパティは、該当idプロパティ値で設定した数だけ追加できます。 例)btnContent,btnFotmat |
「|」、「,」区切り記号を使用する場合は、空白を入れないでください。
空白文字が入れられた場合は、該当文字を許可しないというメッセージが出力され、保存されません。
簡単なサンプルを作成
オブジェクトのcontentsプロパティを「true」に設定してモジュールを作り、nexacro studioで該当オブジェクトのcontentsプロパティ値を変更する方法について説明します。
モジュールプロジェクト作成
1
メニューの「File > New > Project」を選択して、Project Wizardを実行します。
2
Project Nameを入力して、「Next」ボタンをクリックします。
3
Object IDを入力して、Contents項目値を「true」に変更します。
4
「Next」ボタンをクリックして、Contents Informationを下記のように変更します。
5
「Finish」ボタンをクリックしてプロジェクトを生成します。
画面構成
1
デザイン領域にStaticコンポーネントとButtonコンポーネントを配置し、Formのサイズを適切に調整します。
2
コンポーネントidを下記のように設定します。
Static: staComp Button: btnComp
Contents Item項目の設定
1
Project ExplorerでMetaInfo項目の下のオブジェクト名を選択します。
2
プロパティウィンドウでcontentsプロパティを確認し、ボタンをクリックします。
ContentsInfo Editorが実行されると、下段のContents Item項目を追加します。
3
「+」ボタンをクリックしてアイテムを追加します。
4
追加したアイテム行にある「+」ボタンをクリックして、下位のアイテムを2つ追加します。
5
TagName、TypeNameなどの項目を下記のように変更します。
最上位のアイテムであるTypeNameは、現在作業しているオブジェクトクラスを選択します。例題の「nexacro.CompContentsSample」です。
nexacro studioでcontentsプロパティを設定すると、各下位のアイテムは一つずつ追加することができ、id値は「staComp」、「btnComp」に設定されます。
スクリプト作成
1
Project Explorerでオブジェクト名の下にあるxcdlファイルを選択します。
2
Class Definitionタブを選択します。
Contentsプロパティ値の設定時に設定された値を処理する方式は、直接スクリプトで実装する必要があります。Component Wizardでcontentsプロパティを設定すると、スクリプトコードは下記のように生成されます。
nexacro.CompContentsSample.prototype.contents = ""; nexacro.CompContentsSample.prototype.set_contents = function (v) { this.contents = v; this._setContents(this.contents); }; nexacro.CompContentsSample.prototype._setContents = function (v) { // This function is necessary to apply contents in the run environment. // TODO : enter your code here. };
3
プロパティウィンドウで、on_attach_contents_handle、on_created_contents項目をダブルクリックして、該当関数を生成します。
アプリ実行時にNRE、WREで発生するオブジェクトインターフェイスが異なるため、下記のように2つをすべて登録しました。サービス対象がWREだけであれば、on_attach_contents_handle関数のみ登録します。
4
on_attach_contents_handle、on_created_contents関数を下記のように修正します。
on_created_contentsはNREで動作する関数ですが、nexacro studioでの該当コンポーネントのロード時に動作しながら重複した関数が実行されてしまうので、system.navigatornameをチェックして、nexacro studioで実行されないように設定します。
nexacro.CompContentsSample.prototype.on_attach_contents_handle = function (win) { nexacro._CompositeComponent.prototype.on_attach_contents_handle.call(this, win); this._setContents(this.contents); }; nexacro.CompContentsSample.prototype.on_created_contents = function (win) { nexacro._CompositeComponent.prototype.on_created_contents.call(this, win); if(system.navigatorname != "nexacro DesignMode") { this._setContents(this.contents); } };
5
_setContents関数を下記のように修正します。
_setContents関数は、下記のような状況で呼び出されます。
nexacro studioでオブジェクトを追加したFormをロード
nexacro studioでオブジェクトcontentsプロパティ値を変更
アプリロード時にon_attach_contents_handle、on_created_contents関数を呼び出し
contentsプロパティで設定した値はXML文字列に伝わり、関数内でDomParserを使ってDOMDocumentオブジェクトを生成し、各項目に設定された値を確認して設定した値を反映します。
nexacro.CompContentsSample.prototype._setContents = function (v) { this.contents = v; var objDoc = new nexacro.DomParser(); var xmlDoc = objDoc.parseFromString(this.contents); var obj = null; var n, children = null; var contentsNode = xmlDoc.firstChild; if(!contentsNode) return; var objectNode = contentsNode.firstChild; if(!objectNode || objectNode.tagName != "MyComp") return; var childNode = objectNode.firstChild; while(childNode) { var id = childNode.getAttribute("id"); var obj = this.form[id]; if(obj == undefined) break; var attributes = childNode.attributes; var nCount = attributes.length; for(var i=0; i<nCount; i++) { var attr = attributes[i]; var attr_name = attr.name; var attr_value = attr.value; if(attr_name == "id") continue; var setter = obj["set_"+attr_name]; if(setter) setter.call(obj, attr_value); } childNode = childNode.nextSibling; } };
エミュレータで動作を確認
1
メニューの「Generate > Emulate」を選択して、エミュレータを実行します。
2
プロパティウィンドウが表示されない場合は、上段のアイコンの中で「Show Object MetaInfo」をクリックします。
3
プロパティウィンドウで contentsプロパティを確認し、ボタンをクリックします。
4
Basic Contents Editorが実行されたら、「+」ボタンをクリックしてアイテムを追加します。
5
追加した最上位のアイテムを選択し、「+」ボタンをクリックして2つのアイテムを追加します。
前のステップで、Contents Itemを設定する際に、指定されたidで2つのアイテムのみ追加できるように設定したため、2つのアイテムのみ追加できます。
6
追加した下位アイテムを選択して、プロパティウィンドウでコンポーネントのプロパティ値を適切に調整します。
7
「OK」ボタンをクリックし、設定したプロパティ値がエミュレータに表示されているか確認します。
モジュールをインストールして動作を確認
これからモジュールを配布し、配布したモジュールをnexacro studioで確認してみましょう。
1
メニューの「Deploy > Module Package」を選択して、モジュールのインストールファイルを生成します。
配布したモジュールのインストールファイルをnexacro studioから取得します。
2
nexacro studioでプロジェクトを生成するか、既存のプロジェクトを実行します。
3
メニューの「File > Install Module Wizard」を選択し、モジュールファイルをインストールします。
4
FormにCompContentsSampleコンポーネントを配置します。
5
プロパティウィンドウでcontentsプロパティを確認し、ボタンをクリックします。
「Contents」タブでアイテムを追加して設定する方法は、エミュレータと同様です。これからは、「Design Source」タブで設定する方法について説明します。
6
「Design Source」タブで下記のコードをコピー・貼り付けて、プロパティ値を設定します。
<Contents> <MyComp id="MyComp00"> <Static id="staComp" text="TEST" color="red" font="36px/normal "Arial"" textAlign="center"/> <Button id="btnComp" text="TEST BUTTON" background="cornflowerblue"/> </MyComp> </Contents>
7
「OK」ボタンをクリックし、設定したプロパティ値がデザインウィンドウに表示されるか確認します。
8
Quick Viewを実行して、NREもしくはウェブブラウザで、コンポーネントがプロパティ設定のとおりに表示されるか確認します。
9
FormにButtonコンポーネントを追加して、onclickイベント関数を下記のように作成します。
ボタンをクリックする際にオブジェクトのcontentsプロパティ値を設定し、オブジェクト内のコンポーネントのtextプロパティ値を変更します。
this.Button00_onclick = function(obj:nexacro.Button,e:nexacro.ClickEventInfo) { this.CompContentsSample00.set_contents("<Contents><MyComp id='MyComp00'><Static id='staComp' text='SAMPLE'/><Button id='btnComp' text='SAMPLE BUTTON'/></MyComp></Contents>"); };
10
Quick Viewを実行して、ボタンをクリックするとテキストが変更されるか確認します。
オブジェクトのcontentseditorプロパティで設定
nexacro studioで別途開発したコンテンツエディタプロジェクトを連結して使用する機能をサポートします。
nexacroモジュルデベロッパーでコンテンツエディタを個別に生成する機能は、まだサポートしておりません。
nexacro studioでコンテンツエディタプロジェクトを生成して作成する方法は、公式的にサポートしない機能です。モジュールコンポーネントを試験製作する一部の協力企業が使用する機能です。
Project Explorerでオブジェクトを選択すると、プロパティウィンドウでContents Editorに関するプロパティを指定できます。
項目 | 説明 |
---|---|
contentseditorformurl | コンテンツエディタ画面をデザインしたXFDLファイルを指定します。 contentseditorproject項目値を先に指定して、該当プロジェクト内のFormリストの中から選択します。 |
contentseditorproject | コンテンツエディタプロジェクトのパスを指定します。 |
contentseditorproject項目に指定するコンテンツエディタプロジェクトは、モジュールプロジェクトの下位パスに位置する必要があります。
ContentsInfo MetaInfoの編集時にcontentseditorを「external」に設定する必要があります。
登録したコンテンツエディタプロジェクトはProject Explorerに表示され、項目選択時にnexacro studioで実行するかどうか確認します。