Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js:包含具有相同ID的多个模型的集合_Javascript_Backbone.js_Coffeescript - Fatal编程技术网

Javascript Backbone.js:包含具有相同ID的多个模型的集合

Javascript Backbone.js:包含具有相同ID的多个模型的集合,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,我有一个主干网中的合并收藏,其中包含照片和相册 为了区分它们,我添加了一个字段type,它可以是photo或album。填充集合时,我会在集合#model方法中创建不同的模型 model: (attrs, options) -> switch attrs.type when 'album' then new App.Models.Album(attrs, options) when 'photo' then new App.Models.Photo(at

我有一个主干网中的合并收藏,其中包含照片和相册

为了区分它们,我添加了一个字段
type
,它可以是
photo
album
。填充集合时,我会在
集合#model
方法中创建不同的模型

  model: (attrs, options) ->
    switch attrs.type
      when 'album' then new App.Models.Album(attrs, options)
      when 'photo' then new App.Models.Photo(attrs, options)
现在我发现了一个奇怪的错误,添加一张照片和一本具有相同ID的相册(比如说
2
)会导致合并

我在源代码中找到了LOC。它似乎是可以撤销的,而无需创建主干分叉本身。我试过了,但也试过了

我想到了4种不同的方法,我不知道哪一种更好:

  • 我可以给id添加前缀。比如说
    photo\u 2
    。这会导致后端的更改以及前端的某些更改不会在
    /photos/photo_2
  • 我可以用叉子叉脊骨和肋骨
  • 我可以创建两个单独的集合,但必须在视图中处理合并和排序(这会影响客户端性能,并且需要重写后端)
  • 我可以从照片ID开始,比如说
    1000000
    。这将极大地降低上载了具有给定ID的照片的给定用户也创建了具有相同ID的相册的可能性

  • 我建议您在相册和照片中添加以下内容:

      idAttribute: 'uniqueId'
      parse: function(response) {
        response.uniqueId = type+'_'+response.id
        return response;
      }
    

    从版本1.2开始,您可以使用来指定集合如何唯一标识模型。在您的情况下,可以执行以下操作以确保您的类型具有不同的ID

      var MyCollection = Backbone.Collection.extend({
        modelId: function (attrs) {
          return attrs.type + "-" + attrs.id;
        }
        // ...
      })
    

    id属性:'uniqueId'

    如果在声明时不知道此唯一ID,请尝试

    idAttribute:'UUID'


    我从中生成了一个,并把它放在这里,这里定义的这个属性不需要在模型中,所以我只放了一个UUID。

    有没有办法把模型作为一个参数而不仅仅是它的属性?你能编辑你的答案,让它更清晰一点,或者添加一个代码示例?