覆盖 destroy() 以删除与模型关联的照片不会删除模型本身

Overriding destroy() to remove photos associated with model doesn't remove model itself

在我的 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, {
...

只是一个猜测:options 是否有可能传递给您的扩展 destroy(...) 方法包括 { wait: true }?如果是这样,模型将不会从集合中删除 until the server responds with a sync event

您覆盖 destroy(...) 的方式永远不会发生。

在你的模型对象而不是原型中尝试这个。

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);
}