在对服务发出POST请求后,Backbone客户端不会为模型分配id

时间:2014-05-15 12:11:25

标签: javascript web-services rest backbone.js client

我有一个骨干客户端和python服务。我希望能够创建新条目并使用" delete"删除它们。按钮。当我向我的服务发出POST请求时,它会响应:

{"entry": {"Title": "-", "Description": "-", "Price": "-", "id": 5}}

但是我的客户端模型没有从中分配id。如果我想要删除他,我必须首先刷新页面,因此fetch()方法将使用服务器更新我的模型,然后我可以做到。这意味着模型被发送到服务,它接收到id,但不会将其设置为我的模型。有解决方案吗 我的观点代码:

app.BookListView = Backbone.View.extend({
el: '.page',

initialize: function () {
this.collection = new app.BookList();
this.collection.fetch({reset: true});
this.render();
this.listenTo( this.collection, 'add', this.renderBook );
this.listenTo( this.collection, 'reset', this.render );     
},

events:{
    'click #add':'addBook',
},

addBook: function( e ){
    e.preventDefault();

    var formData = {};

    $( '#addBook div' ).children( 'input' ).each( function( i, el ) {
        if( $( el ).val() != '' ){
            formData[ el.id ] = $( el ).val();
        }   
    });         
    this.collection.create( new app.Book( formData ) );

},  

render: function () {
    this.collection.each(function( item ){
    this.renderBook( item );
}, this );
},

renderBook: function ( item ) {
    var bookView = new app.BookView({
        model: item
    });
    this.$('#BookTable').append( bookView.render().el );
}
});

// EDIT
事实证明,我以某种方式找到了问题的答案,但仍然不知道如何解决它。问题在于我从服务器解析数据的方式。目前我在我的收藏中解析它们如下:

parse: function( response ) {   
return response.entries;
}

所以当我从服务器请求一个集合时,我的解析函数运行正常。但是当我只从服务器请求单个模型时(如创建新模型或更改现有模型的情况),它仍然会尝试解析数组,这显然会失败,因此不会为模型提供id 。我试图在我的模型中添加解析函数:

parse: function( response){
return response.entry;
}

这使得一切都在一个模型上运行(它正确地为它们分配了id)但是现在,当我请求整个集合时,我的集合解析函数不起作用而我无法查看它。

所以现在看来​​,我必须在选择单个模型或正确查看整个集合之间做出选择,我不能同时拥有这两个模型。你有任何解决方案吗?

0 个答案:

没有答案