我使用骨干js(Marionette Framework)和其他功能(如Backgrid,骨干本地存储,Backbone Radio,环氧树脂,骨干关系模型)制作app。
有什么问题?
当我在Backbone集合中使用localstorage功能时,它会在我的视图中显示空白表。
var UserModel = require('./user-model');
var BackgridFilter = require('backgrid.filter');
var BackgridPaginator = require('backgrid.paginator');
var BackgridSelectFilter = require('backgrid.selectfilter');
Backbone.localStorage = require('backbone.localstorage');
var UserCollection = Backbone.PageableCollection.extend({
model: UserModel,
mode: "client"
localStorage: new Backbone.LocalStorage("UserCollection"),
});
var UserC = new UserCollection();
// here I make json file manually and call it out
UserC.fetch({
url: "/javascript/app/user-groups/user.json"
});
return UserC;
当我将其注释出localStorage行时,它会显示表格中的数据列表,但当时的localstorage无效。
这是Backgrid调用
// Initialize column structure for backgrid table
var columns = [{
name: "name",
label: "Name",
cell: "string",
direction: "descending",
editable:false
}, {
name: "role",
label: "Role",
cell: RoleCell,
editable:false
},
{
name: "group",
label: "Group",
cell: GroupCell,
editable:false
},
{
name: "application",
label: "Application",
cell: ApplicationCell,
editable:false
}];
var uCollection = this.collection;
// Initialize a new Grid instance
var grid = new Backgrid.Grid({
columns: columns,
collection: uCollection
});
this.ui.userTable.append(grid.render().el);
我想做什么
当我在运行时添加1个项目并刷新页面时,刷新页面后需要显示新项目。但是因为我不能在我的backgrid集合中使用localstorage。
所以,如果您有任何想法我如何在我的backgrid js中使用localstorage功能或任何可以帮助解决我的问题的引用。这将是很大的帮助。
感谢。
答案 0 :(得分:0)
上面是尝试从本地存储中获取集合。
如果您想使用url
代替localstorage
,请使用{ajaxSync: true}
来自https://github.com/jeromegn/Backbone.localStorage
如果需要,可以通过将ajaxSync选项标志传递给任何Backbone AJAX函数来使用默认的Backbone.sync(而不是本地存储),例如:
myModel.fetch({ ajaxSync: true });
修改强>:
由于您使用url
从ajaxSync
获取,因此您还没有localstorage中的集合。因此,当您从url
获取集合时,也可以在success
函数中在localstorage中创建集合。
Collection.create
,否则 ajaxSync=true
应在您的localstorage中创建模型
var UserCollection = Backbone.PageableCollection.extend({
model: UserModel,
mode: "client",
url: "/javascript/app/user-groups/user.json",
localStorage: new Backbone.LocalStorage("UserCollection"),
});
var UserC = new UserCollection();
// here I make json file manually and call it out
UserC.fetch({
ajaxSync: true,
success: function(collection){
collection.each(function(model){
UserC.create({id: model.get("id"), field: model.get("field")});
});
}
});