extjs - 如何创建向 Controller 注册的模型的新实例?

标签 extjs model controller extjs4 extjs4.2

在 Controller 内创建关联模型的新实例的惯用方法是什么?

动机:

如果我更改 ModelClass,下面的代码不会更新,我必须找到所有损坏并手动修复它们。

如果我可以在 Controller 中使用关联,它会自动更新,但我找不到任何有关从 Controller 引用创建新实例的神奇咒语的文档。

这是我的 Controller 的相关部分:

Ext.define('AdminApp.controller.SelectFilesController', {
    extend: 'Ext.app.Controller',

    models: [
        'File'
    ],

    // lots of stuff snipped for brevity

    onFilefieldChange: function(filefield, value, eOpts) {
        Ext.each(Ext.getDom('select-upload-button-fileInputEl').files, function(f) {
                var fm = new AdminApp.model.File({
                    name: f.name,
                    size: f.size,
                    type: f.type,
                    md5: '',
                    status: 0
                });
            }
        });

    // lots more stuff snipped for brevity 
}

我想知道:

我在 documentation 中找到了这个:

It’s important to note that the getters for both views and models return a reference to the class (requiring you to instantiate your own instances), while the getters for stores and controllers return actual instances.

我找不到任何实例化实例的代码应该是什么样子的示例。

最佳答案

经过多次尝试和错误以及简单的受过教育的猜测......

我弄清楚了语法应该是什么。

首先,您需要创建对模型的引用。

按照约定,这是模型的名称,前缀为 get,后缀为 Model

var fmc = this.getFileModel();

我必须在访问每个项目的 Ext.each() 函数之外执行此操作,因为 this 引用指向 HTML5 File对象而不是我的Controller

然后您只需使用常规 Ext.create(fmc, {/* config */} 即可获取一个新实例,如下所示。

var fm = Ext.create(fmc, {
    name: f.name,
    size: f.size,
    type: f.type,
    md5: '',
    status: 0
});

因此问题中 onFilefieldChange 函数的正确版本应如下所示:

onFilefieldChange: function(filefield, value, eOpts) {
    var fmc = this.getFileModel();
    Ext.each(Ext.getDom('select-upload-button-fileInputEl').files, function(f) {
            var fm = Ext.create(fmc,{
                name: f.name,
                size: f.size,
                type: f.type,
                md5: '',
                status: 0
            });
        }
    });
}

关于extjs - 如何创建向 Controller 注册的模型的新实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20308731/

相关文章:

css - 复选框附近的虚线边框 IE9

r - 在 R 中构建 Pareto/NBD 模型时出现 cbind 错误(BTYD 包)

asp.net-mvc - 这是 jquery ajax 调用 aspnet mvc Controller 的有效数据吗?

javascript - ext js 树 : How load nodes dynamically when afterrender event occured?

pdf - 如何在 ext.window 中显示 pdf 文件?

javascript - ExtJS XML 字段在 Chrome 中工作,但在 IE 或 FF 中不起作用

python - Google App Engine 模型父级

mysql - 设计公司->所在位置->产品数据库

asp.net - MVC3 Partial View 需要一个 Controller ,但我可以将其设为非公开吗?

asp.net-mvc - asp.net mvc - 检查调用了什么 Controller 和方法?