我有以下型号:
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。
这对我来说似乎是一个丑陋的工作,并想知道是否有更好的方法?
我想我的问题是:处理这样的事情的最佳方式是什么?
答案 0 :(得分:1)
可能的解决方案是将order_id
属性添加到模型中并将id
保留为自然键吗?在我看来,对于反对框架想要处理idProperty
的方式来说,这是一项非常艰巨的工作。只是我的2c。
答案 1 :(得分:0)
就像John Hall所说,你应该使用另一个idproperty
或重命名你的id,以便框架使用隐式id(内部id)。
脏/幻像随后会起作用,发布会在数据中包含用户ID,但不包括记录的密钥。