扩展 Ext.data.Model(动态添加字段)
Extend Ext.data.Model (add fields dynamically)
我通过使用原型添加字段来扩展现有模型。一切正常,数据可以从服务器端接收,也可以在客户端使用。但是,当我现在更新数据并将其发送回服务器端时,代理的编写器无法识别"新"字段。
更具体地说:我有一个这样的模型:
Ext.define('Osgaar', {
extend: 'Ext.data.Model',
fields: [
{ name: 'first', type: 'string' },
{ name: 'second', type: 'string' },
{ name' 'third', type: 'string' }
],
proxy: {
type: 'rest',
url: 'public/svcmethod',
reader: {
type: 'json',
root: 'data'
},
writer: {
type: 'json',
writeAllFields: false
}
}
});
我像这样扩展模型:
Osgaar.prototype.fields.add({ name: 'fourth', type: 'string' });
我试图将writeAllFields
设置为 false
以转移所有属性,只有来自定义模型的属性,而不是使用原型添加的属性(Fiddler 确认了这一点)。
现在有没有人可以在不定义新模型的情况下解决这个问题?
提前谢谢你。
我认为这里最好的解决方案如下:
Osgaar.prototype.fields.add(new Ext.data.Field({ name: 'fifth', type: 'string'})); // create Ext.data.Field constructor, not just simple Object
我快速浏览了一下 Writer 实现,下面是写入数据时由 write() 调用的方法:
getRecordData: function(record) {
var isPhantom = record.phantom === true,
writeAll = this.writeAllFields || isPhantom,
nameProperty = this.nameProperty,
fields = record.fields, // <- look here
data = {},
changes,
name,
field,
key;
if (writeAll) {
fields.each(function(field){
if (field.persist) { // <- checks the persist property!
name = field[nameProperty] || field.name;
data[name] = record.get(field.name);
}
});
然后,我检查了在定义模型后添加到原型中的字段的持久属性的值,结果发现它是未定义的。这是因为您并没有真正创建一个继承所有字段默认值和其他有用内容的 Ext.data.Field 实例,您只是将一个普通对象添加到字段集合中。Osgaar.prototype.fields只是一个Mixed Collection,由于您直接使用它,因此没有地方可以隐式调用Ext.data.Field构造函数。
如果应用程序逻辑经常动态添加模型字段,请考虑向自定义模型实现 addField() 方法(在继承链中创建另一个基类)。
希望这有帮助,祝你好运!我已经使用 ExtJS 一段时间了,所以这对我来说就像一个测验:)
我为我的原始问题找到了另一种解决方案。
我没有将字段添加到模型的原型中,而是执行以下操作:
Osgaar_Temp = Osgaar;
delete Osgaar;
Ext.define('Osgaar', {
extend: 'Osgaar_Temp',
fields:
[
{ name: 'typeCategories', type: 'string' }
]
});
这似乎是最好的解决方案。
相关文章:
- JS动态添加字段-删除按钮不起作用
- 向laravel表单动态添加字段
- MaskMoney.js无法处理动态添加字段
- 流星:在创建帐户上添加字段
- 使用DB值动态添加字段到Form,php
- 使用object.freeze()扩展函数对象-can't添加字段
- 在ASP.Net web窗体/MVC中动态加载和添加字段
- 如何在使用Knex.JS添加字段时捕捉错误
- KendoUI 网格:动态向数据源添加字段
- Jquery- 动态添加字段 - 防止删除最后一个项目
- JQuery 无法获取动态添加字段的值
- 扩展 Ext.data.Model(动态添加字段)
- 如何使用角度 JS 添加嵌套的添加字段
- 如何在 CKeditor 上传中向 POST 值添加字段
- 在流星中向用户集合添加字段的正确方式
- 按数组分组并在主数组中添加字段和子数组
- 如何在JavaScript中为HTML上的动态添加字段执行乘法
- 如何在javascript中为html上的动态添加字段匹配id
- 在具有嵌套属性的轨道中动态添加字段
- 使用jquery添加字段