5

我想对我使用 Sencha Architect 创建的模型进行子类化。假设我已经创建了一个名为 BaseModel 的模型,我需要创建另一个模型,称为 MyModel,它扩展了 BaseModel。在代码中,它看起来像这样:

// 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 中使用工具箱中的 Class 项来执行此操作。

好吧,听起来很有希望——所以我试了一下。在项目检查器中,我点击了加号,转到“类”,然后点击“模型”。所以现在我的项目中有一个自定义模型类。我调用它MyModel并将“扩展”配置设置为MyApp.model.BaseModel. 所以现在至少代码是正确的,看起来就像我上面的一样。然而,建筑师似乎不知道MyModel该类是一个模型,即使它位于我的项目检查器的“模型”部分并扩展BaseModel。它没有我需要指定的任何模型配置属性,例如“字段”,并且我无法MyModel与任何类型的 Store 关联。换句话说,建筑师对待MyModel作为一个完全自定义的类,并且不公开任何模型行为。这基本上使得这种子类化方式完全没用——我可以子类化一个模型,但是我不能在我的项目中的任何地方将它用作模型,那么有什么意义呢?

所以问题是我如何让 Architect 将MyModel其视为实际模型?这不是在 Architect 中进行子类化的正确方法吗?我刚刚开始我的项目,但我预见到需要经常进行子类化,无论是模型、控制器、商店等,如果我不能用 Architect 做到这一点,那将是一个严重的限制。

4

2 回答 2

0

我遇到了同样的问题,就使用架构师而言,这将是一个交易破坏者。

我可以通过创建自定义类、扩展现有模型,然后在新类上创建自定义属性来解决它:“fields”、“hasMany”、“proxy”等。

您可以将属性设置为类型 Array 或 Object,然后您可以在代码编辑器中编辑字段。

这不是一个完美的解决方案,因为架构师不将类识别为模型,因此您不能拖放字段等。

但是,输出的代码忠实于本地创建的模型。

希望这会有所帮助,本

于 2013-10-23T06:00:09.503 回答
0

你在做所有正确的事情。当前形式的建筑师以这种方式“工作”,但我认为还有另一种方式会提供更好的结果。

尝试使用传统模型并使用 createAlias 和在基本模型(即 xtype)上设置的 userAlias

于 2013-08-04T01:09:45.657 回答