在 Controller 内创建关联模型的新实例的惯用方法是什么?
动机:
如果我更改 Model
的 Class
,下面的代码不会更新,我必须找到所有损坏并手动修复它们。
如果我可以在 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/