【问题标题】:Sencha Architect: Subclassing a modelSencha Architect:子类化模型
【发布时间】:2013-08-02 20:10:10
【问题描述】:

我想对我使用 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 关联。换句话说,Architect 将MyModel 视为一个完全自定义的类,并且不公开任何模型行为。这基本上使得这种子类化方式完全没用——我可以对模型进行子类化,但我不能在项目中的任何地方将它用作模型,那么有什么意义呢?

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

【问题讨论】:

    标签: extjs sencha-architect


    【解决方案1】:

    你做的都是对的。当前形式的建筑师以这种方式“工作”,但我认为还有另一种方式会提供更好的结果。

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

    【讨论】:

    • 你的意思是在基类上设置userAlias还是派生的?那么如何建立基础/派生关系?
    【解决方案2】:

    我遇到了同样的问题,这在使用架构师方面会破坏交易。

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

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

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

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

    希望这会有所帮助, 本

    【讨论】:

      猜你喜欢
      • 2012-10-06
      • 2014-12-07
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-20
      • 2012-09-22
      • 1970-01-01
      相关资源
      最近更新 更多