我有一个UserPanel
视图,它使用UserModel
作为模型。在UserPanel
的模板中,我有一个条件来检查模型是否为undefined
。如果模型存在,则显示用户信息。如果没有,则显示“注册”表单。
在UserPanel
的用户信息部分,我有一个基本上是“取消注册”的按钮。用户单击它,并删除用户信息。 UserPanel
通过重新呈现来响应,允许他们注册不同的UserModel
。
常识告诉我打电话给this.model.destroy。当我使用此方法时,我的模型将从我的数据存储中删除,但该对象仍然存在于this.model
中。当视图响应模型更新时(通过调用render
),它仍然认为它具有有效模型及其所有数据等。我可以在this.model
上调用delete,但这不会触发任何事件。我无法在delete
之前触发事件,因为在我删除模型之前视图会更新。我已设置视图以使用仅在模型上使用delete
的方法响应模型删除,然后调用render
。这可行,但在概念层面上困扰我,因为这些方法用于处理视图更新而不是更多的模型操作。
一般来说,明确处理未由集合存储的模型的正确方法是什么?
编辑:我使用Backbone.localStorage作为我的数据存储。这可能与它有关。
答案 0 :(得分:0)
this.model.destroy();
然后在destroy
事件
this.model = null;
答案 1 :(得分:0)
我不会绑定到destroy
事件,而是使用model.destroy
的成功回调,如下所示:
this.model.destroy({ success: _.bind(this.onModelDestroySuccess, this) });
然后将您的modelDestroyedView
重命名为onModelDestroySuccess
:
onModelDestroySuccess: function () {
delete this.model;
this.render();
},
我还会定义一个cleanupModelEvents
方法来清除你对模型的事件绑定:
cleanupModelEvents: function() {
this.stopListening(this.model);
},
从onModelDestroySuccess
:
onModelDestroySucess: function () {
this.cleanupModelEvents();
delete this.model;
this.render();
},
希望这有帮助。