具有用户定义id的ExtJs4模型

Joh*_*ohn 7 extjs extjs4 extjs4.1

我有以下型号:

Ext.define('Gst.model.Order', {
    extend: 'Ext.data.Model',
    idProperty: 'id',
    fields: [
        { name: 'id', type: 'string' } 
    ]
});     
Run Code Online (Sandbox Code Playgroud)

我的问题是订单模型的ID是用户定义的.因此,创建新订单实例并将其插入订单商店的代码将是:

order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedvalue'}); 
store.insert(0, order);
Run Code Online (Sandbox Code Playgroud)

发生的情况是因为idProperty由用户提供,然后订单没有标记为幻像,因此不被视为脏.因此,没有向服务器发出POST.如果我手动将订单设置为幻像和脏,那么当我将订单插入商店时,我可以触发POST,如:

order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedID'});
order.phantom = true;
order.setDirty(); 
store.insert(0, order);
Run Code Online (Sandbox Code Playgroud)

这样会很好,但是我的服务器端代码使用REST控制器并且期望​​POST不具有和在URL中的id.因此,虽然请求extJS问题是

POST http://app.local/api/order/someuserdefinedID.json
Run Code Online (Sandbox Code Playgroud)

虽然我的服务器寻找的格式是

POST http://app.local/api/order.json
Run Code Online (Sandbox Code Playgroud)

因此,解决这个问题的唯一方法就是创建一个订单并设置phantom = true并调用setDirty().这将导致发出POST,然后在我的RestProxy中覆盖buildUrl:使用逻辑来测试POST请求并从url中删除idProperty.

这对我来说似乎是一个丑陋的工作,并想知道是否有更好的方法?

我想我的问题是:处理这样的事情的最佳方法是什么?

Joh*_*all 1

可能的解决方案是将order_id属性添加到模型中并将 保留id为自然键吗?在我看来,与框架对待idProperty. 只是我的2c。