我有以下模型:
Ext.define('Gst.model.Order', {
extend: 'Ext.data.Model',
idProperty: 'id',
fields: [
{ name: 'id', type: 'string' }
]
});
我的问题在于订单模型的ID是由用户定义的。因此,创建新订单实例并将其插入到订单存储中的代码如下:
order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedvalue'});
store.insert(0, order);
发生这种情况是因为用户提供了idProperty,所以订单没有被标记为虚拟,因此不被视为脏数据。由于这个原因,没有POST请求发送到服务器。如果我手动将订单设置为虚拟和脏数据,然后插入到商店中,就可以触发POST请求,例如:
order = Ext.create('Gst.model.Order', {'id': 'someuserdefinedID'});
order.phantom = true;
order.setDirty();
store.insert(0, order);
这可能没问题,但我的服务器端代码使用REST控制器,并期望POST请求在URL中不带有ID。因此,尽管extJS发出的请求是:
POST http://app.local/api/order/someuserdefinedID.json
虽然我的服务器寻找的格式是 <\p>。
POST http://app.local/api/order.json
所以我想到的解决方法就是创建一个订单,然后将phantom设置为true并调用setDirty()。这将导致POST请求被发送,然后在我的RestProxy覆盖buildUrl:方法中编写逻辑来测试POST请求并从URL中删除idProperty。
对我来说,这似乎只是一个丑陋的变通方法,我想知道是否有更好的方法?
我的问题是:如何处理这种情况最好的方式是什么?