我有以下模型:
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
虽然我的服务器要寻找的格式是
POST http://app.local/api/order.json
所以我解决这个问题的唯一方法是创建一个订单并设置 phantom = true 并调用 setDirty()。这将导致发出 POST,然后在我的 RestProxy 中覆盖 buildUrl: 并使用逻辑测试 POST 请求并从 url 中删除 idProperty。
这对我来说似乎是一个丑陋的工作,想知道是否有更好的方法?
我想我的问题是:处理此类事情的最佳方法是什么?