我正在构建Backbone应用程序(使用Marionette),我有一个像这样的deleteUser函数:
//User is a Backbone.Model
UserController.prototype.deleteUser = function(user) {
//Show jquery mobile loader
$.mobile.loading( "show" );
user.destroy({
success: function(user) {
console.log("Delete-Success: ", user);
//Trigger an event that redirects to the List-Page
App.channel.trigger("user:delete:success", user);
},
error: function(user) {
console.log("Delete-Error: ", user);
//Trigger an event that shows an error message and does not redirect
App.channel.trigger("user:delete:error", user);
}
}).always(function(){
$.mobile.loading( "hide" );
});
};
如果服务器可用且没有错误,此功能正常。它还显示服务器无法访问时的错误消息。错误消息显示在表单顶部,以便用户稍后再试。
但是,当我第一次收到错误消息后再次尝试删除模型时,控制台会抛出错误
未捕获错误:必须指定“url”属性或函数。
我的收藏品有一个网址属性:
return Backbone.Collection.extend( {
url: 'http://path-to-users'
});
我的模型还有一个urlRoot属性
return Backbone.Model.extend( {
urlRoot: 'http://path-to-users',
defaults: {
firstname: "",
lastname: "",
age: ""
}
为什么会抛出错误消息?
编辑:
我从userApp.js调用此函数:
var userApp = function() {
this.Controller = new UserController();
...
App.channel.on("user:delete", this.controller.deleteUser);
}
App.channel.on由EditUserView的“click #delete”函数触发(Marionette.ItemView):
deleteUser: function(){
this.trigger("delete:clicked", this.model);
return false;
}
模型不会添加到集合中。每次我想要显示它时,我只是从服务器上获取集合。 “channel”定义为App.channel = _.extend({},Backbone.Events);