Backgridjs中的本地存储使用

时间:2015-06-26 06:27:22

标签: jquery html5 backbone.js local-storage backgrid

我使用骨干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功能或任何可以帮助解决我的问题的引用。这将是很大的帮助。

感谢。

1 个答案:

答案 0 :(得分:0)

上面是尝试从本地存储中获取集合。 如果您想使用url代替localstorage,请使用{ajaxSync: true}

来自https://github.com/jeromegn/Backbone.localStorage

  

如果需要,可以通过将ajaxSync选项标志传递给任何Backbone AJAX函数来使用默认的Backbone.sync(而不是本地存储),例如:      myModel.fetch({ ajaxSync: true });

修改

由于您使用urlajaxSync获取,因此您还没有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")});
             });
         }
});