デフォルトでは、インストールされている Architect ユーザーエクステンション(.aux ファイル)のファイルは Documents/Architect/Extensions ディレクトリに、そのエクステンションの名前で格納されます。このディレクトリは [Edit Menu(編集メニュー)] > [Architect Settings(Architect 設定)] > [Asset Storage(アセットストエージ)] セクション > [Extension(エクステンション)] で変更できます。
ユーザーエクステンションはバージョンごとに固有のサブディレクトリを保持し、その名前は1.0、1.1、のようになります。
バージョン番号が付けられたディレクトリに保存されているファイルやディレクトリは次のとおりです。
architect/ # JSON definition files for each of the UX classes
Xx1.Definition.js # Definition file for the Xx1.Definition class
Xx2.Definition.js # Definition file for the Xx2.Definition class
...
build.xml # Generated file that controls how the UX is built
docs/
package.png # Graphic used on Sencha Market for this UX
screenshots/
pict.png # Graphic used for Sencha Market
licenses/ # License agreement for this UX
Readme.md
overrides/ # Contains any overrides that are required
package.json # Describes the User Extension package to be built
Readme.md # Description of this UX used on Sencha Market
resources/ # Static resources used in this UX
css/ # CSS resources for this UX
images/ # Files for images used in this UX
sass/ # SASS files used in this UX
config.rb
etc/ # General, non-component oriented SASS
example/
Readme.md # Information about this SASS
etc/ # SASS files that must be used explicitly
src/ # SASS sources that mimic the component-class hierarchy
# These files are gathered in a build of the CSS
# based on classes used by the build.
var/ # Contains variable declaration files named by component class
src/ # Javascript source files for each extension class
xxxx.js
yyyy.js
ほとんどのファイルが自動生成されたものです。*package.json* ファイルには、手作業で情報を設定する必要があります。ユーザーエクステンション内の各クラス/コンポーネント用のDefinition(定義)ファイルも、手作業で作成してデータを設定する必要があります。次のセクションでは、この 2 つのファイルの完全なリファレンス情報を提供します。これらのファイルの設定に関する説明やガイドラインについては、ユーザーエクステンションの作成を参照してください。
package.json ファイル
package.json ファイルでは、ユーザーエクステンションパッケージの作成方法、このパッケージのバージョン番号、使用できるフレームワークのバージョン、パッケージの作成に必要なファイルすべてをを定義します。**sencha generate** コマンドにより、*package.json* ファイルの雛形をセットアップします。
{
"name": "DreidelExtension",
"type": "code",
"creator": "anonymous",
"summary": "Short summary",
"detailedDescription": "Long description of package",
"version": "1.0.0",
"compatVersion": "1.0.0",
"format": "1",
"local": true,
"css": [{
path: "resources/css/dreidel.css"
}],
"requires": []
}
このファイルを手作業で編集して、使用するエクステンションに関する情報を追加することが必要です。フィールドは次のように定義されます。
フィールド | 説明 |
---|---|
name | ユーザーエクステンションパッケージの名前です。この名前は sencha generate のコマンドラインで指定された名前から生成されます。これによってディレクトリ名が決まるため、変更しないでください。 |
type | 「code」でなくてはなりません。 |
creator | このユーザーエクステンションの作者名を明記したい場合には、ここに名前を入れます。 |
summary | 作成したエクステンションの概要を記述します。たとえば、「特別なウィジェットを備えたおしゃれなパネル」などです。(将来の利用のために予約) |
detailedDescription | ユーザーエクステンションのより詳細な説明です。(今後のために留保) |
version | ユーザーエクステンションの今回リリースのバージョン番号です。1.1.2 というようなバージョンの文字列となります。Sencha Cmd ではユーザーエクステンションの新規作成時に 1.0 を自動設定します。アップグレードを反映する番号に変更できます。 |
compatVersion | Architect では現在使用していません。 |
local | 有効な値は「local」です。-->. |
css | "path" 属性が必要でオブジェクトとして指定される src/css フォルダからロードする CSS ファイルの配列。 |
requires | ユーザーエクステンションパッケージをロードする前にロードすることが必要なクラスの配列です。たとえば、エクステンションクラスが依存している大規模なライブラリがある場合に便利です。requires を使用しないと、必須ライブラリのロード処理が完了する前に、コンポーネントによる処理が開始される場合があります。 |
compatVersion と local 行の間に architect
セクションを追加することも必要です。以下は、SchedulerGrid ユーザーエクステンションからとった例です。これは、クラスを 5 つ持つ複雑なユーザーエクステンションです。
"architect": {
"defsonly": true,
"compatFrameworks": [
"ext42"
],
"requires":[
"sch-all-min.js"
],
"classes": [{
"definition": "ResourceModel.js",
"className": "Sch.model.Resource",
"js": ["ResourceModel.js"]
},{
"definition": "ResourceStore.js",
"className": "Sch.data.ResourceStore",
"js": ["ResourceStore.js"]
},{
"definition": "EventModel.js",
"className": "Sch.model.Event",
"js": ["EventModel.js"]
},{
"definition": "EventStore.js",
"className": "Sch.data.EventStore",
"js": ["EventStore.js"]
},{
"definition": "SchedulerGridPanel.js",
"className": "Ext.ux.SchedulerGrid",
"js": ["SchedulerGridPanel.js"]
}]
},
フィールドは次のように定義されます。
フィールド | 説明 |
---|---|
defsonly | (オプション)クラスの定義を指定することはできますが、JavaScript ファイルは指定できません。たとえば、Scheduler Grid ユーザーエクステンションには個別に定義された 5 つのクラスを定義する scheduler-grid-all.js がありますが、その定義はすべて schedulergrid-all.js クラスで既に行われています。 |
compatFrameworks | このユーザーエクステンションを使用できるフレームワークのバージョンです。ピリオドなしの文字列で表されます(「touch22」、「ext42」など)。この文字列では 2 桁以上の数字を使用することはできません。たとえば「ext421」と指定すると、パッケージはロードされません。複数の値はカンマで区切って指定できますが、1 つのユーザーエクステンションパッケージに Ext JS フレームワークと Sencha Touch フレームワークの両方を指定することはできませんので、注意してください。 |
requires | (オプション)このエクステンションのクラスを実行する前にロードする必要のあるクラスをリストします。 |
classes array | パッケージのカスタムコードを構成するクラスすべてをリストする配列です。各クラスの .js Javascript ソースは src ディレクトリに格納し、architect ディレクトリには各クラスの定義ファイルを格納することが必要です。 |
className | このクラスの完全修飾名です。 |
definition | このクラスの定義ファイルの名前です。定義ファイルは architect ディレクトリに格納することが必要です。 |
js | このクラスに対応する src フォルダにあるファイル名の配列です。このファイルは 1 つしかない場合がよくあります。 |
空白のものも含め、すべてのフィールドをファイルに含めることが必要です。
定義ファイル
定義ファイルでは次のことを定義します。
- ユーザーに対するエクステンションの提示方法
- ユーザーに公開する設定
- Sencha Architect における動作
エクステンション内のクラスそれぞれについて定義ファイルを 1 つ作成することが必要です。ファイルの拡張子は .js でなければなりません。ファイル名にはクラス名と「Definitions」または「Def」という文字列を使用することを推奨します。たとえば、FancyPants というエクステンションの場合、定義ファイルの名前は「FancyPantsDef.js」とします。
定義ファイルはすべて、User Extension Project ディレクトリの architect セクションに格納されています。*package.json* ファイルでは、エクステンション内の各クラスに対する定義ファイルを識別します。
サンプルの定義ファイルを次に示します。
{
classAlias: "plugin.dragdropregion",
className: "Ext.ux.DragDropRegion",
inherits: "abstractplugin",
autoName: "MyDragDropRegion",
validParentTypes:["abstractpanel"],
"toolbox": {
"name": "Drag Drop Region",
"category": "Containers",
"groups": ["Containers","Views"]
},
configs: [{ name: ‘drag’, type: ‘boolean’, hidden: false, initialValue: true }, { name: ‘drop’, type: ‘boolean’, hidden: false, initialValue: true }, { name: ‘group’, type: ‘string’, hidden: false, initialValue: ‘ddg’ },{ name: ‘notifyEnterCls’, type: ‘string’, hidden: false, initialValue: ‘highlightDropZone’ }, { name: ‘dragLabel’, type: ‘string’, hidden: false, initialValue: ‘Untitled Region’ }, { name: ‘frameSwapped’, type: ‘boolean’, hidden: false, initialValue: ‘true’ }, { name: ‘frameColor’, type: ‘string’, hidden: false, initialValue: ‘#99FF99’ }, { name: ‘frameCount’, type: ‘number’, hidden: false, initialValue: 2 }] }
これらの全プロパティの説明が下の表に記載されています。
必須のプロパティ
プロパティ | タイプ | デフォルト値 | 説明 |
---|---|---|---|
className | string | -- | エクステンションのクラス名です(たとえば Ext.ux.Coverflow)。このクラスの src ファイルにある extend 行の内容と一致していることが必要です。 |
classAlias | string | -- | エクステンションのエイリアスです(たとえば widget coverflow)。このクラスの src ファイルにある alias 行の内容と一致していることが必要です。 |
オプションのプロパティ
プロパティ | タイプ | デフォルト値 | 説明 |
---|---|---|---|
inherits | string | Ext.Base | このクラスが継承するクラスです。 |
autoName | string | -- | このクラスをプロジェクトに初めて含める際に、クラス名を自動生成するのに使用される文字列です。この名前は [Project Inspector(プロジェクトインスペクタ)] とコードエディタファイルに表示されます。 |
toolbox | object | -- | このコンポーネントがツールボックスでどのように表示されるかを記述するオブジェクトです。下記を参照してください。 |
configs | object 配列 | -- | 設定オブジェクトの配列 |
listeners | object 配列 | -- | リスナオブジェクトの配列。使用できるイベントに関する詳細な説明は後述します。 |
validParentTypes | string 配列 | すべての親 | このオブジェクトに対する有効な親タイプの配列(xtype に対応する文字列を使用)です。ここにタイプがリストされている場合、このコンポーネントはこのリストに挙げたタイプのいずれかに一致するコンポーネントにのみドロップできます。 |
validChildTypes | string 配列 | すべての子 | このオブジェクトに対する有効な子タイプの配列です。ここに挙げたタイプのコンポーネントのみがこのコンポーネントの子となれます。 |
disableInitialView | boolean | false | true の場合、このコンポーネントはユーザーの初期ビューに表示されません。 |
disableDuplication | boolean | false | true の場合、このコンポーネントは複製できません。 |
hideConfigs | string 配列 | -- | 非表示にする設定の配列です。別の定義を継承する際、設定の一部を非表示にしたい場合に便利です。 |
showConfigs | string 配列 | すべてのコンフィグ | 表示する設定の配列です。ここに設定がリストされている場合、表示できるのはリストに挙げられているもののみです。このプロパティが指定されていない場合、すべてのコンフィグが [Config(コンフィグ)] パネルに表示されます。 |
toolbox プロパティ
toolbox プロパティは、ツールボックスにおけるこのエクステンションの表現を記述するオブジェクトです。
プロパティ | タイプ | 説明 |
---|---|---|
name | string | このエクステンションのツールボックスカテゴリに表示される、ユーザーにわかりやすい名前です。 |
category | string | エクステンションのカテゴリです。このエクステンションが表示される、ツールボックスのカテゴリです。この値には常に「Extensions」が追加されるため、ユーザーエクステンションコンポーネントはすべてこの Extensions カテゴリに表示されます。「Container」や「Buttons」といった適切な機能別のカテゴリも作成すると良いでしょう。このクラスを複数のカテゴリで表示するには、この例の「groups」での表示に使用するのと類似した配列を作成します。 |
groups | string 配列 | フィルタグループの配列です。ツールバーの右カラムにこのクラスがリストされるグループを定義します。グループは、ツールボックスにデフォルトで存在するものでも、新しく作成するものでも構いません。 |
configs
このコンポーネントでサポートされるコンフィグを記述する設定オブジェクトの配列です。ここにリストされているコンフィグはすべて、「hidden」プロパティが「true」となっていない限り、コンポーネントの [Config(コンフィグ)] パネルでセットできます。
プロパティ | タイプ | デフォルト値 | 説明 |
---|---|---|---|
name | string | -- | [Config(コンフィグ)] パネルで使用される表示名です。 |
type | -- | -- | このコンフィグのタイプです(boolean、string など - 下表参照)。 |
hidden | boolean | false | true の場合。 |
initialValue | -- | -- | 作成時に自動設定される値です。 |
コンフィグのタイプ
タイプ | 説明 |
---|---|
配列 | 配列リテラルを入力できます - これはコードエディタで編集できます。 |
boolean | true/false の値を保存するチェックボックスを表示します。 |
controller | 利用できるコントローラのリストを表示します。 |
date | デートピッカーを表示します。フォーマットされた日付のみが有効な値です。 |
function | コードエディタを使用して関数を記述できます。 |
model | 利用できるモデルのリストを表示します。 |
number | 「文字列」と同様ですが、数値入力のみが可能です。 |
object | コードエディタを使用してオブジェクトリテラルを記述できます。 |
store | 利用できるストアのリストを、オプションの storeSelector パラメータでフィルタリングして表示します。 |
string | シンプルなテキスト入力ボックスを表示します。 |
template | XTemplate オブジェクトをコンフィグとして追加および編集できます。 |
typedarray | 以下など、特定タイプの複数アイテム(複数モデルなど)を追加できるように指定できます。{ "name":"typedArrayOfModels", "type":"typedarray", "memberConfig":{ "type":"model", "confirmDelete": false } } |
uri | 文字列と同様、自動的に url を任意の値セットにエンコーディングする追加機能(スペース文字を %20 に変換するなど) |
view | 利用できるビューのリストを表示します。 |
listener オブジェクト
イベントの発火時に呼び出すリスナ名 / 関数の配列です。
プロパティ | タイプ | デフォルト値 | 説明 |
---|---|---|---|
name | string | -- | このオブジェクトの名前です。 |
fn | string | -- | イベントが検出されると呼び出される関数です。 |
現在、以下のイベントリスナがサポートされています。
イベント名。 | コールバックパラメータ |
---|---|
create | -- |
validate | -- |
cfgadd | cfg name |
cfgchange | cfg name、newValue、oldValue |
cfgchangecheck | cfg name、newValue、oldValue |