TECHTOGOU

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

coder 2024-05-16 原文

我在 Backbone 中有一个合并的集合,其中包含照片和相册。

为了区分它们,我添加了一个字段type,它是photoalbum。当我填充集合时,我在 Collection#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)的照片和相册会导致合并。

我已经追踪到 these源代码中的 LOC。如果不创建 Backbone 本身的分支,它似乎是不可撤销的。我试过了,但它也是fails 35 tests .

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

  1. 我可以为 ID 添加前缀。比方说 photo_2。这会导致后端发生变化,前端也会发生一些变化,以免在 /photos/photo_2
  2. 处访问服务器
  3. 我可以 fork Backbone 和 change these本地地址。
  4. 我可以创建两个单独的集合,但必须在 View 中处理合并和排序(这会影响客户端性能并需要重写后端)
  5. 我可以从照片 ID 开始,比方说 1000000。这将极大地降低已上传具有给定 ID 的照片的给定用户也创建具有相同 ID 的相册的可能性。

最佳答案

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

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

关于javascript - Backbone.js:包含多个具有相同 ID 的模型的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16902440/

有关javascript - Backbone.js:包含多个具有相同 ID 的模型的集合的更多相关文章

  1. javascript - 从对象数组中过滤唯一值 - 2

    这个问题在这里已经有了答案:GetalluniquevaluesinaJavaScriptarray(removeduplicates)(91个答案)关闭5年前。如何使用Array.filter()返回唯一的id和name?我的场景与我研究过的解决方案略有不同,因为我有一个对象数组。我找到的每个示例都包含单个值的平面数组。data=[{id:555,name:"Sales",person:"Jordan"},{id:555,name:"Sales",person:"Bob"},{id:555,name:"Sales

  2. javascript - 如何在 ChartJS 中使用溢出滚动修复图表图例宽度-高度 - 2

    我想为我的元素创建饼图,所以我正在使用ChartJS,但是chartJS存在一些问题,如果我使用10到20个数据字段,那么时间图表看起来不错,但是当我我在一个图表中应用了50到60个以上的数据字段,所以图表看起来比图例小,如果有时数据字段比隐藏的图表多,你只能看到图例,图表就不见了。我想为该图例设置高度或宽度,如果有更多数据,也适用于滚动条。这是供您引用的fiddle链接https://jsfiddle.net/KDM1010/5um78rbk/<canvasid="myChart"width="500"height="300"&g

  3. javascript - Vue (nuxt) 中的全局组件 - 2

    在构建Vue应用程序时,我们在每个模板中重复使用某些Vue组件。我们的网格系统存在于.region、.layout、.grid、.column元素之外。它们都是独立的Vue组件(,...)。我们现在在每个模板中都这样做:importBlMainfrom'~components/frame/main/Main.vue'importBlRegionfrom'~components/frame/region/Region.vue'importBlLayoutfrom'~components/frame/layout/Layout.vue'imp

  4. javascript - Accessibility - React 确保点击事件有按键事件 - 2

    我想确保我所有的onClick事件都在onKeyDown事件旁边。我将使用eslint-plugin-jsx-a11y来确保这一点。但在代码中,这是一种实现这种泛型的方法。我的意思是,一直这样做会很烦人:if(event.keyCode===13){...}如果用户使用onClick中的执行函数,我希望有一种方法可以告诉onKeyDown中的元素。或者类似的解决方案http://www.karlgroves.com/2014/11/24/ridiculously-easy-trick-for-keyboard-accessibility/例如,在Angular方面,我很清楚。让我们寻找

  5. javascript - 函数式编程和 DOM 操作 - 2

    如何在以“函数式”方式编写的脚本中以最“纯粹”的方式操作DOM。例如,如果我只需要更改元素宽度,我应该使用像这样的典型语法:document.querySelector(".class").style.width=...或者编写专门的函数,比如:functionresize(el,w){returnel.style.width=w;}resize(document.querySelector(".class",100));我想,我了解函数式编程的一般概念,但我遇到的所有示例都集中在处理数字或字符串上。操作DOM被认为是副作用,所以我想知道如何以正确的方式

  6. javascript - React-Native-Maps:如何动画协调? - 2

    我正在使用以下代码但没有成功://NativeBase容器内部<MapView.Animatedref="map"style={styles.map}showsUserLocation={true}zoomEnabled={true}showsMyLocationButton={true}showsCompass={true}showScale={true}showsIndoors={true}mapType={this.state.mapTypes[this.state.mapTypeCode]}/>//类的componentDidMount内部navig

  7. javascript - 如何将 Node 可读流转换为 RX 可观察流 - 2

    如果我有一个Nodejs流,例如来自process.stdin或fs.createReadStream,我如何将其转换为RxJsObservable使用RxJs5流?我看到了RxJs-Node有一个fromReadableStream方法,但看起来它已经将近一年没有更新了。 最佳答案 对于任何正在寻找这个的人,根据Mark的建议,我为rxjs5改编了rx-nodefromStream实现。import{Observable}from'rxjs';//Adaptedfromhttps://github.com/Reac

  8. javascript - 路径上特定点上的 SVG 标记中间 - 2

    我得到了一些在Canvas上生成路径的代码。路径对象看起来与此类似:<pathclass="link"d="M450,215.L265,236L225,236"style="stroke-width:1;"></path>在View中(a,b,c字母只是为了说明问题):我的问题是我想在线的中间画一些箭头(标记),在“a”到“b”之间,但是当我创建一个标记并执行标记中间属性时,它会在b点生成。我试图在a和b之间做一些点,但是marker-mid在那里和b点上做了箭头。来自WEBAPI文档:Themarker-midd

  9. javascript - 无法使用 Webpack、Typescript、自定义模块目录找到模块 - 2

    我想做什么我写了一个虚拟模块my-component,它基本上导出了一个类Something。我把它放在app/modules/中。现在我想使用app/app.js中的导入语法来访问它:import{Something}from'my-component';期望:根据我当前的Webpack配置(如下),我希望它能工作。实际:这会引发错误:ERRORin[default]/<project_dir>/app/app.ts:1:26Cannotfindmodule'my-component/Something'.我尝试解决的问题我知道模块本身的定

  10. javascript - linting 和编译有什么区别? - 2

    我知道在Java中有一个编译器可以在您编写错误代码时告诉您。但是Javascript不能那样工作,因为它没有编译器。但是,“linting”javascripts是编译代码的方式吗? 最佳答案 Linting正在解析代码以验证语法和格式是否正确并遵循良好实践。linter会告诉您缩进是否不正确,或者您是否应该在=运算符周围添加空格。如果您的代码包含众所周知的安全漏洞或代码异味,linter也会向您发出警告。编译是解析代码以验证语法是否正确并将代码转换为不同的语言(通常是更快的语言)。那么有什么区别呢?编译:语法验证代码转换为不同的语

随机推荐

  1. javascript - 从对象数组中过滤唯一值 - 2

    这个问题在这里已经有了答案:GetalluniquevaluesinaJavaScriptarray(removeduplicates)(91个答案)关闭5年前。如何使用Array.filter()返回唯一的id和name?我的场景与我研究过的解决方案略有不同,因为我有一个对象数组。我找到的每个示例都包含单个值的平面数组。data=[{id:555,name:"Sales",person:"Jordan"},{id:555,name:"Sales",person:"Bob"},{id:555,name:"Sales

  2. javascript - 如何在 ChartJS 中使用溢出滚动修复图表图例宽度-高度 - 2

    我想为我的元素创建饼图,所以我正在使用ChartJS,但是chartJS存在一些问题,如果我使用10到20个数据字段,那么时间图表看起来不错,但是当我我在一个图表中应用了50到60个以上的数据字段,所以图表看起来比图例小,如果有时数据字段比隐藏的图表多,你只能看到图例,图表就不见了。我想为该图例设置高度或宽度,如果有更多数据,也适用于滚动条。这是供您引用的fiddle链接https://jsfiddle.net/KDM1010/5um78rbk/<canvasid="myChart"width="500"height="300"&g

  3. javascript - Vue (nuxt) 中的全局组件 - 2

    在构建Vue应用程序时,我们在每个模板中重复使用某些Vue组件。我们的网格系统存在于.region、.layout、.grid、.column元素之外。它们都是独立的Vue组件(,...)。我们现在在每个模板中都这样做:importBlMainfrom'~components/frame/main/Main.vue'importBlRegionfrom'~components/frame/region/Region.vue'importBlLayoutfrom'~components/frame/layout/Layout.vue'imp

  4. javascript - Accessibility - React 确保点击事件有按键事件 - 2

    我想确保我所有的onClick事件都在onKeyDown事件旁边。我将使用eslint-plugin-jsx-a11y来确保这一点。但在代码中,这是一种实现这种泛型的方法。我的意思是,一直这样做会很烦人:if(event.keyCode===13){...}如果用户使用onClick中的执行函数,我希望有一种方法可以告诉onKeyDown中的元素。或者类似的解决方案http://www.karlgroves.com/2014/11/24/ridiculously-easy-trick-for-keyboard-accessibility/例如,在Angular方面,我很清楚。让我们寻找

  5. javascript - 函数式编程和 DOM 操作 - 2

    如何在以“函数式”方式编写的脚本中以最“纯粹”的方式操作DOM。例如,如果我只需要更改元素宽度,我应该使用像这样的典型语法:document.querySelector(".class").style.width=...或者编写专门的函数,比如:functionresize(el,w){returnel.style.width=w;}resize(document.querySelector(".class",100));我想,我了解函数式编程的一般概念,但我遇到的所有示例都集中在处理数字或字符串上。操作DOM被认为是副作用,所以我想知道如何以正确的方式

  6. javascript - React-Native-Maps:如何动画协调? - 2

    我正在使用以下代码但没有成功://NativeBase容器内部<MapView.Animatedref="map"style={styles.map}showsUserLocation={true}zoomEnabled={true}showsMyLocationButton={true}showsCompass={true}showScale={true}showsIndoors={true}mapType={this.state.mapTypes[this.state.mapTypeCode]}/>//类的componentDidMount内部navig

  7. javascript - 如何将 Node 可读流转换为 RX 可观察流 - 2

    如果我有一个Nodejs流,例如来自process.stdin或fs.createReadStream,我如何将其转换为RxJsObservable使用RxJs5流?我看到了RxJs-Node有一个fromReadableStream方法,但看起来它已经将近一年没有更新了。 最佳答案 对于任何正在寻找这个的人,根据Mark的建议,我为rxjs5改编了rx-nodefromStream实现。import{Observable}from'rxjs';//Adaptedfromhttps://github.com/Reac

  8. javascript - 路径上特定点上的 SVG 标记中间 - 2

    我得到了一些在Canvas上生成路径的代码。路径对象看起来与此类似:<pathclass="link"d="M450,215.L265,236L225,236"style="stroke-width:1;"></path>在View中(a,b,c字母只是为了说明问题):我的问题是我想在线的中间画一些箭头(标记),在“a”到“b”之间,但是当我创建一个标记并执行标记中间属性时,它会在b点生成。我试图在a和b之间做一些点,但是marker-mid在那里和b点上做了箭头。来自WEBAPI文档:Themarker-midd

  9. javascript - 无法使用 Webpack、Typescript、自定义模块目录找到模块 - 2

    我想做什么我写了一个虚拟模块my-component,它基本上导出了一个类Something。我把它放在app/modules/中。现在我想使用app/app.js中的导入语法来访问它:import{Something}from'my-component';期望:根据我当前的Webpack配置(如下),我希望它能工作。实际:这会引发错误:ERRORin[default]/<project_dir>/app/app.ts:1:26Cannotfindmodule'my-component/Something'.我尝试解决的问题我知道模块本身的定

  10. javascript - linting 和编译有什么区别? - 2

    我知道在Java中有一个编译器可以在您编写错误代码时告诉您。但是Javascript不能那样工作,因为它没有编译器。但是,“linting”javascripts是编译代码的方式吗? 最佳答案 Linting正在解析代码以验证语法和格式是否正确并遵循良好实践。linter会告诉您缩进是否不正确,或者您是否应该在=运算符周围添加空格。如果您的代码包含众所周知的安全漏洞或代码异味,linter也会向您发出警告。编译是解析代码以验证语法是否正确并将代码转换为不同的语言(通常是更快的语言)。那么有什么区别呢?编译:语法验证代码转换为不同的语