gpt4 book ai didi

javascript - 无法在 Backbone.localStorage 插件中设置初始收集数据

转载 作者:行者123 更新时间:2023-11-30 17:07:58 24 4
gpt4 key购买 nike

我正在使用 Backbone.localStorage并具有以下集合:

var PlayersCollection = Backbone.Collection.extend({
model: Player,
localStorage: new Backbone.LocalStorage("players-backbone"),
});

并尝试使用以下方式设置初始数据:

var col = new PlayersCollection([
{
"model": "myapp.person",
"pk": 1
},
{
"model": "myapp.person",
"pk": 2
}
]);

但不幸的是,我的收藏中没有以上元素:

col.localStorage.records // [] nothing

如何根据初始收集数据初始化 localStorage 存储?

最佳答案

好吧,首先想到的是 Backbone.LocalStorage 仅通过“同步”请求加载数据。这意味着即使 localStorage 中存在现有数据,您也需要先调用 col.fetch() 才能将数据设置到集合中。

对于您的具体示例,此解决方案就足够了。但是,它有自己的一组注意事项,如果您可以扩展您的需求,我很乐意解决这些问题:

var PlayersCollection = Backbone.Collection.extend({
localStorage: new Backbone.LocalStorage("players-backbone"),
initialize: function(){
// NOTE: Models are NOT set on Collection in initialize. Defer until ready.
_.defer(function(){
if(!this.isEmpty()){
this.invoke('save');
this.fetch();
}
}.bind(this));
});

var col = new PlayersCollection([
{
"model": "myapp.person",
"pk": 1
},
{
"model": "myapp.person",
"pk": 2
}
]);

col.once('sync', function(){
console.log('col:', col.localStorage.records);
});

显然,这里的主要问题是:

  • 不直观的事件驱动初始化。这可以通过拥有一个负责创建您的 PlayersCollection 的工厂来解决,或者通过为集合提供另一个需要在初始化后运行的方法来解决。所有解决方案都略显丑陋。

  • 修改现有的 localStorage 数据。通过告诉集合在加载时保存,您最终将修改 localStorage 中已有的内容。这可以通过检查空集合来稍微解决。但是,您可能仍然会有一些意想不到的结果。

但是,我主要关心的是为什么当您的集合已经被赋予其模型时您需要从 localStorage 中提取数据。为什么不直接访问 col 中的模型而不是查询其记录?

关于javascript - 无法在 Backbone.localStorage 插件中设置初始收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27571483/

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