7

我有以下模型:

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。

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

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

4

2 回答 2

1

可能的解决方案是向模型添加一个order_id属性并将 保留id为自然键吗?在我看来,框架想要处理idProperty. 只是我的2c。

于 2013-01-28T16:43:41.650 回答
0

正如 John Hall 所说,您应该使用另一个idproperty或重命名您的 id,以便框架使用隐式 id(内部 id)。

然后脏/幻象将起作用,并且发布将在数据中包含用户 ID,但不作为记录的键。

于 2014-06-13T10:20:13.447 回答