gpt4 book ai didi

javascript - 永久链接集合中所有模型的 Backbone.js 唯一属性名称

转载 作者:行者123 更新时间:2023-11-30 05:56:47 25 4
gpt4 key购买 nike

我想确保在创建新模型时特定属性在整个集合中是唯一的,以便我最终可以将此属性用作永久链接。

我有一个列表集合和列表模型。 ( CoffeeScript )

class App.Models.List extends Backbone.Model
defaults:
name: "My New List"

class App.Collections.ListSet extends Backbone.Model
model: App.Models.List

将新模型添加到 ListSet 时,如果已经存在具有该名称的模型,我想在名称属性的末尾添加一个自动递增的数字。例如,My New List 1 如果存在带有 My New List 的模型。

我不希望它过于突兀并显示错误,而只是自动修复问题。我对添加递增整数背后的逻辑很满意,但我需要指导将代码放置在何处以进行更改。

最佳答案

这可能对你有用:

App.Models.List = Backbone.Model.extend({
initialize: function(attrs) {
this.set(attrs);
this.set({originalName: attrs.name});

var count = yourCollection.reduce(function(count,model){
return count + (model.get('originalName') === this.get('originalName') ? 1 : 0);
},0,this);

if(count > 0) {
this.set({name: this.get('name') + ' ' + count});
}
}
});

这是一个演示:jsFiddle DEMO

这应该做的是每次初始化模型时,扫描您的集合以查看是否有任何其他模型具有相同的 originalName。如果是这样,您将结果附加到名称属性。

===更新===

我现在意识到,最好在将模型添加到集合时进行修改,以便将模型与集合解耦。这是更新后的代码片段:

App.Models.List = Backbone.Model.extend({
initialize: function(attrs) {
this.set({originalName: attrs.name});
}
});

App.Collections.Lists = Backbone.Collection.extend({
model: App.Models.List,
initialize: function() {
this.on('add',this.resolveNameConflict,this);
},
resolveNameConflict: function(model){
var count = this.reduce(function(c,m){
return c + (m.get('originalName') === model.get('originalName') ? 1 : 0);
},0);
if(count > 1) {
model.set({name: model.get('originalName') + ' ' + (count-1)});
}
}
});

和一个演示:jsFiddle DEMO

关于javascript - 永久链接集合中所有模型的 Backbone.js 唯一属性名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11413117/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com