Backbone破坏集合之外的模型

时间:2013-11-05 21:17:37

标签: javascript backbone.js

我有一个UserPanel视图,它使用UserModel作为模型。在UserPanel的模板中,我有一个条件来检查模型是否为undefined。如果模型存在,则显示用户信息。如果没有,则显示“注册”表单。

UserPanel的用户信息部分,我有一个基本上是“取消注册”的按钮。用户单击它,并删除用户信息。 UserPanel通过重新呈现来响应,允许他们注册不同的UserModel

常识告诉我打电话给this.model.destroy。当我使用此方法时,我的模型将从我的数据存储中删除,但该对象仍然存在于this.model中。当视图响应模型更新时(通过调用render),它仍然认为它具有有效模型及其所有数据等。我可以在this.model上调用delete,但这不会触发任何事件。我无法在delete之前触发事件,因为在我删除模型之前视图会更新。我已设置视图以使用仅在模型上使用delete的方法响应模型删除,然后调用render。这可行,但在概念层面上困扰我,因为这些方法用于处理视图更新而不是更多的模型操作。

一般来说,明确处理未由集合存储的模型的正确方法是什么?

编辑:我使用Backbone.localStorage作为我的数据存储。这可能与它有关。

2 个答案:

答案 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();
},

希望这有帮助。