【发布时间】:2014-10-16 09:16:52
【问题描述】:
我有一个对话模型和一个显示该模型的视图。从服务器获取该模型没有任何问题(此时 url 属性工作正常),并呈现视图。 但是,当我尝试在视图的函数中销毁模型时,我收到错误“必须指定“url”属性或函数',即使我在销毁调用之前显示该 url,它正是网址应该是。
这是模型的代码:
MessageManager.models.Conversation = Backbone.Model.extend({
defaults: {
uid: '',
title: '',
messages: [],
users: [],
dateUpdated: null,
isNew: true,
message: ''
},
url: function(){
var url = '/api/conversations';
if(this.get('uid').length > 0) url += '/'+this.get('uid');
return url;
}
});
还有观点:
MessageManager.views.ConversationFull = Marionette.CompositeView.extend({
template: this.template(MessageManager.templates.ConversationFull),
childView: MessageManager.views.MessageListItem,
childViewContainer: '#message-container',
events: {
'click a#btn-delete-conversation': 'deleteConversation'
},
deleteConversation: function(e){
e.preventDefault();
var self = this;
console.log(self.model.url()); //This returns a correct url
self.model.destroy({//This fires the error
error: function(model, result, xhr){
console.log(result.responseText);
},
success: function(model, response, options){
MessageManager.conversations.sync();
AMMain.router.pNavigate('welcome/');
}
});
}
});
谁能提供一些关于如何解决这个问题的见解?我声明模型的方式有问题吗?
编辑:应该注意,此模型上的其他调用(如 fetch 或 sync)会引发相同的错误,即使原始 fetch 工作没有问题。
EDIT2: 嗯,还没有完全出锅,但是我改变了定义模型 url 的方式,使用 urlRoot 和“id”属性,现在 DELETE 请求被发送到服务器没有错误。
【问题讨论】:
标签: backbone.js views models