【问题标题】:Listing instances of a Model in Backbone application在 Backbone 应用程序中列出模型的实例
【发布时间】:2014-01-06 14:56:06
【问题描述】:

在我的 Backbone 应用程序中,我有一个模型。如果不是所有实例都属于同一个集合,有没有办法在应用程序中获取此模型的所有实例?有些实例可能根本不属于任何集合。

为什么我需要这样做?

我有一个命名空间模型(比如说 Order.Models.Entry)。这是我正在谈论的实例的模型。有一些像 Order.Models.Entries 这样的集合包含 Order.Models.Entry 类型的实例。但是实例只有在它们被选中(具有特定属性)时才会进入这个集合。在被选中之前,这些模型只是……嗯……模型。

更新

显然,我可以将我创建的每个模型加载到某个 allModels 集合中,正如 cmets 中所建议的那样。但问题并不是真正的解决方法,而是关于精确查找。我想避免将模型添加到 uber-collection 的原因是大多数模型无论如何都会添加到不同的集合中,我只是想避免创建虚拟集合以仅用于跟踪目的。

【问题讨论】:

  • 为什么需要这样做?您认为跟踪所有模型将解决的根本问题是什么?
  • 添加模型实例时,是否总是将其添加到allModels 集合中?
  • @KyleR 我已经用更多信息更新了这个问题。
  • 刚刚看到。我在想没有别的办法。就像在 javascript 中没有办法在不将它们放入某种列表或集合的情况下获取“所有整数变量”一样,我认为您不能简单地获取所有模型实例。
  • @muistooshort 我已经添加了我的问题用例。

标签: javascript backbone.js collections model


【解决方案1】:

没有。有几个很好的设计原因可以说明您不应该这样做。 (封装,不污染全局范围等……)

如果您仍然希望使用此解决方案,您可以只维护一个 Gloabl 列表并将您的 Backbone.Model 插入到此列表中,这是一个快速的解决方案:

var allMyModels = [] ;

var MyModel = Backbone.Model.extend({
   initialize:function(){
       allMyModels.push(this);
       // Some more code here
    },
     // also if you wish you need to remove self on close delete function
});
var x = new MyModel();
var y = new MyModel();

在这段代码的最后,allMyModels 将拥有两个模型

【讨论】:

  • 但现在他们永远在allMyModels
  • 再次,赞成解决方法。但也接受“不”的回答。谢谢。
  • @muistooshort 你不是说这很糟糕,对吗?我的意思是在我的特殊情况下这很好——这些模型在用户下订单时会存在一段时间。一旦订单完成或取消,该集合将被杀死并销毁所有模型。
  • @spliter:但allMyModels 不是一个集合,它只是一个数组,其中包含对其他人不会引用的模型实例的引用。由于没有清理 allMyModels,它只会增长和收集垃圾,直到整个页面被服务器替换。
  • 啊!你完全正确@muistooshort 甚至没有注意到这一点!这使得这个答案不是真的可以接受。出于性能原因,将allModels 作为集合会更智能。
【解决方案2】:

为什么不创建一个集合(我们称之为allModels),每次创建模型时,执行:allModels.add(model)。这样,您就可以访问模型,如果您销毁模型,它就会从集合中删除自己。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多