Sencha Architect:对模型进行子类化

时间:2013-08-01 18:36:07

标签: extjs sencha-architect

我想使用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”,并在那个命中“模型”中。所以现在我的项目中有一个自定义的Model类。我将其称为MyModel,并将“extend”配置设置为MyApp.model.BaseModel。所以现在至少代码是正确的,看起来就像我上面所说的那样。但是,Architect似乎不知道MyModel类是一个模型,即使它位于我的Project Inspector的“Model”部分并扩展BaseModel。它没有我需要指定的任何模型配置属性,如“字段”,我无法将MyModel与任何类型的商店关联。换句话说,Architect将MyModel视为完全自定义的类,并且不公开任何Model行为。这基本上使得这种子类化方式完全无用 - 我可以子类化一个模型但是我不能在项目的任何地方使用它作为模型,那么重点是什么?

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

2 个答案:

答案 0 :(得分:0)

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

尝试使用传统模型,并使用createAlias和基本模型上设置的userAlias,也就是xtype

答案 1 :(得分:0)

我遇到了同样的问题,这在使用架构师方面可能是一个交易破坏者。

我能够通过创建自定义类,扩展现有模型,然后在新类上创建自定义属性来解决这个问题:“fields”,“hasMany”,“proxy”等。

您可以设置属性以键入Array或Object,然后可以在代码编辑器中编辑字段。

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

然而,输出的代码忠实于本机创建的模型。

希望这有帮助, 本