0

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

在 的用户信息部分UserPanel,我有一个本质上是“取消注册”按钮。用户点击,用户信息被删除。通过UserPanel重新渲染响应,允许他们注册不同的UserModel.

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

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

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

4

2 回答 2

0
this.model.destroy();

然后在destroy事件中

this.model = null;
于 2013-11-06T00:38:08.373 回答
0

我不会绑定到destroy事件,而是使用类似的成功回调model.destroy

this.model.destroy({ success: _.bind(this.onModelDestroySuccess, this) });

然后将您的重命名modelDestroyedViewonModelDestroySuccess

onModelDestroySuccess: function () {
  delete this.model;
  this.render();
},

我还将定义一个cleanupModelEvents方法来清理您与模型的事件绑定:

cleanupModelEvents: function() {
  this.stopListening(this.model);
},

并从以下位置调用onModelDestroySuccess

onModelDestroySucess: function () {
  this.cleanupModelEvents();
  delete this.model;
  this.render();
},

希望这可以帮助。

于 2013-11-06T04:04:40.170 回答