随着ExtJS 3.x,我能够使用商店的“领域”属性,但它似乎与ExtJS 4我必须绝对使用模型。这很好,但在我的情况下,它不是一个静态模型,我需要动态定义这些字段,有时需要更改它们。动态模型与ExtJS 4
我可以重新创建一个模型,但我需要使用不同的名称,因为它显然不可能修改现有的模型,既不删除它。如果我尝试使用具有相同名称的Ext.regModel,ExtJS崩溃。
感谢您的帮助!
随着ExtJS 3.x,我能够使用商店的“领域”属性,但它似乎与ExtJS 4我必须绝对使用模型。这很好,但在我的情况下,它不是一个静态模型,我需要动态定义这些字段,有时需要更改它们。动态模型与ExtJS 4
我可以重新创建一个模型,但我需要使用不同的名称,因为它显然不可能修改现有的模型,既不删除它。如果我尝试使用具有相同名称的Ext.regModel,ExtJS崩溃。
感谢您的帮助!
4.1 UPDATE:
作为更新...在4.1现在是一个静态方法setFields
其可用于定义模型原型字段。它在控制器的init方法中运行良好。
当我这样做时,我想在模型类中定义一些静态字段,然后设置一些动态的。不幸的是,新的setFields
方法用参数替换了所有字段,但它很容易处理。
此示例使用,其中我的模型和存储被包括在MVC模式控制器的model
阵列和store
阵列(我提供以下所用的方便的吸气剂):
Ext.define('ST.controller.Main', {
extend: 'Ext.app.Controller',
models: ['User', 'Reference'],
stores: ['CurrentUser', 'PermissionRef'],
views: ['MainPanel'],
init: function() {
var me = this;
me.getPermissionRefStore().on('load', function(store, records) {
var model = me.getUserModel();
// this returns the static fields already defined
// in my User model class
fields = model.prototype.fields.getRange();
// add the permission options (dynamic fields) to the static fields
Ext.each(records, function(permission) {
fields.push({name: permission.get('name'), type: 'bool'});
});
// 4.1 method to update the User model fields
model.setFields(fields);
// now load the current user (it will use the updated model)
me.getCurrentUserStore().load();
});
}
});
的User
模型和CurrentUser
商店是创建完全像常规,非动态模型和存储将被包括在其各自的控制器阵列中,'用户'模型仅仅缺少如上所示添加的动态字段。
下面是一个非常简单的例子。只需使用一个正常的Ext.data.Store但不是一个模式,指定的字段属性:
// you can specify a simple string ('totally')
// or an object with an Ext.data.Field ('dynamic')
var fields = ['totally', {name : 'dynamic', type : 'string'}];
var newStore = new MyApp.store.Object({
fields : fields
// other options like proxy, autoLoad...
});
不要指定模型属性 - 它似乎会覆盖领域的财产。
我也想改变列和动态现有电网的内容:关于Ext.data.Store的“域”属性
// reconfigure the grid to use the new store and other columns
var newColumns = [
{header: 'Totally', dataIndex: 'totally'},
{header: 'Dynamic', dataIndex: 'dynamic'}
];
myGrid.reconfigure(newStore, newColumns);
从Ext JS的4文件:
这可能是用于代替指定模型配置的 。 字段应该是一组 Ext.data.Field配置对象。 商店将自动创建一个带有这些字段的 Ext.data.Model。在 通用这个配置选项 应该避免,它存在的目的是向后兼容。 对于任何更复杂的操作,例如 指定了一个特定的id属性或 关联,应为 配置定义并指定一个Ext.data.Model 。
所以要小心 - Sencha可能会在将来删除它。
这里小心 - 如果您在商店中设置字段,而忽略模型,并且您有自定义ID字段,则会失败。您的商店记录将设置其Id,但无法通过getId()返回Id,因为他们不知道自定义ID。不知道这是否是一个错误,但无论如何我都会报告它http://www.sencha.com/forum/showthread.php?280160-model.getId()-with-custom-IdProperty-fails-when-and-store -fields-set-via-metaData&p = 1024289&viewfull = 1#post1024289 – HDave 2014-01-21 16:56:28
这是一个为我工作的人...不得不删除“Model”,而是将其配置为hardcore .. – PedroMorgan 2014-02-05 13:36:29
我也进入了这个问题。我有一个服务负责从服务器获取元数据,并将模型和存储适配到这个元数据。
因此,我定义了一个空模型并将商店配置为使用此模型。
处理元数据时,我将这些新/附加字段添加到模型原型中(metaDataStore是包含元数据的存储区,模型是可以从模型管理器获取的模型):
var fields = [];
metaDataStore.each(function(item) {
fields.push(Ext.create('Ext.data.Field', {
name: item.get('field')
}));
});
model.prototype.fields.removeAll();
model.prototype.fields.addAll(fields);
当我然后调用使用此模型的商店的负载或创建新的模型实例时,正确处理新的字段。
感谢您添加更新 – Jom 2012-05-15 11:38:16
为什么不直接将新字段添加到''MixedCollection''字段?是否有'setFields'方法需要处理?我的意思是旁边创建'Field'实例,在你的情况。 – rixo 2013-07-30 20:37:59