在我的Appcelerator Titanium Alloy项目中,我试图覆盖model.destroy()
以删除与模型关联的照片。我的代码删除照片就好了,但实际上并没有删除模型。我做错了什么?
_.extend(Model.prototype, {
destroy: function (options) {
// override default destroy method to also remove photos
console.log('destroying the model');
var model = this;
options = options ? _.clone(options) : {};
var photos = JSON.parse(model.get('photos'));
photos.forEach(function (photo) {
console.log("Deleting photo: " + photo);
var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, photo);
f.deleteFile();
});
model.trigger('destroy', model, model.collection, options);
}
});
我看到了控制台日志语句,并删除了照片。但模型仍然存在。
我试过的一些事情没有成功:
在我的控制器中,同时调用这两个:
model.destroy();
collection.remove(model);
// also collection.remove([model]);
我已尝试将此添加到我的扩展销毁功能但它无法正常工作
...
f.deleteFile();
});
model.collection.remove(model);
// and model.collection.remove([model]);
model.trigger('destroy', model, model.collection, options);
使用以下内容,模型将被销毁,但我的代码无法运行且照片不会被删除。
_.extend(Model, {
...
答案 0 :(得分:1)
在Model对象中尝试这个,而不是原型。
destroy: function (options) {
// override default destroy method to also remove photos
console.log('destroying the model');
var model = this;
options = options ? _.clone(options) : {};
var photos = JSON.parse(model.get('photos'));
photos.forEach(function (photo) {
console.log("Deleting photo: " + photo);
var f = Ti.Filesystem.getFile(Ti.Filesystem.applicationDataDirectory, photo);
f.deleteFile();
});
Backbone.Model.prototype.destroy.call(this);
}
答案 1 :(得分:0)
猜猜:options
传递给您的扩展destroy(...)
方法的任何机会都包括{ wait: true }
?如果是这样,模型将不会从集合until the server responds with a sync
event中删除。
你覆盖destroy(...)
的方式,永远不会发生。