我有一个骨干客户端和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)但是现在,当我请求整个集合时,我的集合解析函数不起作用而我无法查看它。
所以现在看来,我必须在选择单个模型或正确查看整个集合之间做出选择,我不能同时拥有这两个模型。你有任何解决方案吗?