5

Sencha Architect を使用して作成したモデルをサブクラス化したいです。既に作成した BaseModel というモデルがあり、BaseModel を拡張する MyModel という別のモデルを作成する必要があるとします。コードでは、次のようになります。

// BaseModel.js
Ext.define('MyApp.model.BaseModel', {
   extend: 'Ext.data.Model',

   fields: [...]
});

// MyModel.js
Ext.define('MyApp.model.MyModel', {
   extend: 'MyApp.model.BaseModel',

   fields: [...]
});

私は ExtJS と Sencha Architect を初めて使用しますが、これはコードで実行するのが非常に簡単で、適切なソフトウェア設計にとって非常に重要であるため、Architect でこれを行う方法があるに違いないと思います。残念ながら、これを簡単に行う方法がわかりませんでした。掘り下げた後、Sencha ドキュメント ( http://docs.sencha.com/architect/2/#!/guide/classes ) でこれを見つけました。「カスタム クラス」という見出しの下に次のように記載されています。

ここで説明する機能により、ツールボックスでサポートされているアイテムからクラスを作成できますが、単純な親のないクラス、またはツールボックスに表示されない別のクラスを拡張するクラスを作成する必要がある場合があります。ツールボックスのクラス項目を使用して、Architect でこれを行うことができます。

さて、有望に聞こえます—それで私はそれを試しました。プロジェクトインスペクターでプラス記号を押して「クラス」に移動し、その中で「モデル」をヒットしました。これで、プロジェクトにカスタム Model クラスができました。私はそれを呼び出しMyModel、「拡張」構成を に設定しますMyApp.model.BaseModel。したがって、少なくともコードは正しく、上記のようになります。MyModelただし、プロジェクトインスペクターの「モデル」セクションにあり、クラスが拡張されているにもかかわらず、アーキテクトはクラスがモデルであることを認識していないようBaseModelです。MyModel指定する必要がある「フィールド」などのモデル構成プロパティがまったくなく、どの種類のストアにも関連付けることができません。つまり、アーキテクトは、MyModel完全なカスタム クラスとして、Model の動作を一切公開しません。基本的に、このサブクラス化の方法は完全に役に立たなくなります — モデルをサブクラス化することはできますが、それをプロジェクトのどこでもモデルとして使用することはできません。

問題は、Architect にMyModel実際のモデルとして扱わせるにはどうすればよいかということです。これは Architect でサブクラス化する正しい方法ではありませんか? 私は自分のプロジェクトを始めたばかりですが、モデル、コントローラー、ストアなどであるかどうかにかかわらず、非常に頻繁にサブクラス化する必要があると予測しています.Architectでこれを行うことができない場合、それは深刻な制限です.

4

2 に答える 2

0

あなたはすべて正しいことをしています。現在の形式のアーキテクトはこのように「機能」しますが、より良い結果をもたらすと思われる別の方法があります。

従来のモデルを使用してみて、基本モデル (別名 xtype) に設定された userAlias で createAlias を使用してください

于 2013-08-04T01:09:45.657 に答える
0

私は同じ問題を経験しました。これは、アーキテクトを使用するという点で取引を妨げるものでした。

カスタム クラスを作成し、既存のモデルを拡張してから、新しいクラスにカスタム プロパティを作成することで、この問題を回避できました: "fields"、"hasMany"、"proxy" など。

プロパティを Array または Object 型に設定すると、コード エディターでフィールドを編集できます。

アーキテクトはクラスをモデルとして認識しないため、これは完璧なソリューションではありません。したがって、フィールドなどをドラッグ アンド ドロップすることはできません。

ただし、出力されるコードは、ネイティブに作成されたモデルに忠実です。

これが役に立てば幸いです、ベン

于 2013-10-23T06:00:09.503 に答える