模型 ID = 0 时的 ExtJS 文本字段或组合框 defaultValue

Posted

技术标签:

【中文标题】模型 ID = 0 时的 ExtJS 文本字段或组合框 defaultValue【英文标题】:ExtJS textfield or combobox defaultValue when model has ID = 0 【发布时间】:2014-07-29 17:06:25 【问题描述】:

在我的应用程序(ExtJS 4.2.1)中,我有一个用于创建新记录并将其保存到数据库的窗口。

当我创建窗口并显示它时,我会创建一个新记录并将其分配给窗口表单记录:

 onNewPunchClick: function(button, e, options) 
        var me = this;

        var win = Ext.create('App.view.attendance.punch.EditPunch'),
            editForm = win.down('#editForm');

        var newRec = Ext.create('App.model.attendance.DailyTime', 
            AttendanceId: 0,
            EmployeeId: 0,
            SensorId: 0,
            IsManual: true,
            IsActive: true
        );

        // load record to form
        editForm.loadRecord(newRec);

        win.show();
    ,

然后显示我的表单,但某些字段有“0”,如下所示:

所以我尝试了解决方法,但无法正常工作:

我曾尝试在模型中使用convert 函数,当值为0 时返回' '

我也尝试在模型中使用defaultValue,但没有成功。

我也尝试设置EmployeeId: '',创建模型时没有成功。

我应该缺少一些东西,非常感谢任何帮助。

【问题讨论】:

我已经有一段时间没有沉迷于 ExtJS 开发了,但是我们所有的表格都遇到了同样的问题,我们为其保留了下拉信息。如果您通过 id 链接它们,当它们尚未设置时,它们总是显示 0 而不是没有值。我最终在模型中将类型设置为字符串,这减轻了我的问题。也许这也对你有用?我的网络服务对返回的数据类型非常宽容,所以这不是一个大问题,但也许对你来说不是这样? 把我想出来的解决办法贴出来。 刚刚删除,它可以工作,但是当您尝试更改字段的值时,它不会反映在模型中。 【参考方案1】:

效果很好的解决方案是:

在您的模型中设置您希望具有如下所需行为的属性:

 name: 'EmployeeId', type: 'int', defaultValue: '', convert: null ,

然后在创建模型时将属性设置为未定义。

var newRecord = Ext.create('CustomModel',
    EmployeeId: undefined
);

然后加载表单:

form.loadRecord(newRecord);

提交表单后:

form.updateRecord(newRecord);

【讨论】:

以上是关于模型 ID = 0 时的 ExtJS 文本字段或组合框 defaultValue的主要内容,如果未能解决你的问题,请参考以下文章

ExtJS 4.2.1 - 表单自定义字段验证

ExtJS 4 - 动态模型字段

如何忽略 ExtJS 数据模型中的空字段?

在 ExtJS 中获取组合框的值

如何使用 Jquery 更改按钮单击时的 django 外键对象文本选择字段?

在 ExtJs 4.1 树面板中通过 id 或 name 查找节点