2011-03-03 94 views
0

我有下面的代码,它应该创建一个新的项目。代理类型是REST。Sencha Model.save发送/0.json到服务器

var inst = Ext.ModelMgr.create({ 
        title: values.title 
       }, "EntriesModel"); 

       inst.save({ 
        success: function(model) { 
         console.log(model); 
        } 
       }); 

后保存(),我看到,请求被发送到http://localhost:3000/entries/0.json,而我认为它应该已被送往http://localhost:3000/entries

项模型看起来像这样

Ext.regModel("EntriesModel", { 
fields: [ 
    {name: "id",    type: "int"}, 
    {name: "title",   type: "string"}, 
    {name: "list_id",  type:"int"}, 
    {name: "bought",   type: "boolean"}, 
], 

proxy: { 
    type: 'rest', 
    url: '/entries', 
    format: 'json', 
    noCache: true, 
    reader: { 
     type: 'json', 
     root: 'data' 
    }, 
    writer: { 
     type: 'json' 
    }, 
    listeners: { 
     exception: function (proxy, response, operation) { 
      console.log(proxy, response, operation); 
     } 
    } 
} 
}); 

后端是Rails的。

回答

0

看看这个,如何建设一个休息代理链接:

buildUrl: function(request) { 
    var records = request.operation.records || [], 
     record = records[0], 
     format = this.format, 
     url  = request.url || this.url; 

    if (this.appendId && record) { 
     if (!url.match(/\/$/)) { 
      url += '/'; 
     } 

     url += record.getId(); 
    } 

    if (format) { 
     if (!url.match(/\.$/)) { 
      url += '.'; 
     } 

     url += format; 
    } 

    request.url = url; 

    return Ext.data.RestProxy.superclass.buildUrl.apply(this, arguments); 
} 

重写此方法以提供更多的自定义,但记得要调用超类buildUrl

+0

我找到了其他解决方案。将id添加到Url由appendId属性决定。我认为,它不能将ID添加到创建方法中,因为它在REST中没有意义。但是,现在我在发送创建请求之前设置了appendId。 – 2011-03-03 19:50:26

0

尝试读取这个http://dev.sencha.com/deploy/touch/docs/?class=Ext.data.RestProxy 和示例:

new Ext.data.RestProxy({ 
    url: '/users', 
    format: 'json' 
}); 
// Collection url: /users.json 
// Instance url : /users/123.json 
+0

那么,我已经阅读文档,并设置完全像你说的休息代理,而不是解决方案。 – 2011-03-03 19:48:19