【问题标题】:Extjs 5.0 model POST values not received on server side (working Extjs 4.2)服务器端未收到 Extjs 5.0 模型 POST 值(工作 Extjs 4.2)
【发布时间】:2015-09-08 03:47:11
【问题描述】:

我正在将我们的 Extjs 4.2 应用程序升级到 Extjs 5.0。
我能够调出所有只读页面,但是当我尝试更新/保存数据时遇到问题。非常感谢您的帮助!

我的模型数据值没有显示在服务器端,我可以使用 console.log(model) 打印模型并且它具有所有值,但在服务器端它只有id 和所有其他参数都显示为 null。

这是模型中的代理:


     Ext.define('MyApp.model.User', {
      extend: 'Ext.data.Model',
      id: 'user',
      proxy: {
        type: 'rest',
        url : '/rest/update/user',
        listeners: {
          exception: function(proxy, response, operation) {
            Ext.Msg.alert('Failed', 'Save the user Failed!');
          }
        }
      },
      fields: [
        {name: 'id', type: 'int'},
        {name: 'userName', type: 'string'},
        {name: 'country', type: 'string'}
        ]
    }

控制器:

onUserUpdateAction: function(button, event, action) { 

      var model = Ext.create('MyApp.model.User');    
      model.set('id', "123"); 
      model.set('userName', "john");
      model.set('country', "usa");
      ---
      model.commit() / without commit() it does not add the id in URL like /user/123
      model.save();
}

这是服务器端代码:

@PUT
@Consumes({ "application/json" })
@Path("/Update/user/{id}")
updateUser(@PathParam("id") final int id, final User record);

实现类的第一行日志,有id但是其他的都是null

*** In updateUser() method, id : 123, record: User(id=123, **userName=null, country=null**)

【问题讨论】:

    标签: javascript extjs4 extjs5


    【解决方案1】:

    这里的问题是你试图欺骗分机。您使用 id 创建新记录 - 通常 id 由服务器分配。因此,您需要将其提交以清除它的phantom(新记录)标志,以便Ext 认为它已经是现有记录。但是,提交后,记录没有修改的字段,默认情况下,只有修改的字段被发送到服务器。因此,您需要配置一个编写器,如下所示:

    Ext.define('MyApp.model.User', {
        extend: 'Ext.data.Model',
        idProperty: 'id',
        fields: [
            {name: 'id', type: 'int'},
            {name: 'userName', type: 'string'},
            {name: 'country', type: 'string'}
        ],
    
        proxy: {
            type: 'rest',
            url : 'success.php',
            listeners: {
                exception: function(proxy, response, operation) {
                    Ext.Msg.alert('Failed', 'Save the user Failed!');
                }
            }
            ,writer:{
                 type:'json'
                ,writeAllFields:true
            }
        }
    });
    

    【讨论】:

    • 谢谢!!有用。你是最好的:)。我们认为如果我们指定兼容模式,那么它应该向后兼容 extjs 4.2 看起来情况并非如此 :( 我们必须进行这些更改并测试整个工作流程。无论如何,再次感谢并感谢您的快速响应!!跨度>
    猜你喜欢
    • 2011-07-04
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多