【问题标题】:Backbone.localStorage + RequireJS: Not working?Backbone.localStorage + RequireJS:不工作?
【发布时间】:2012-08-27 10:00:53
【问题描述】:

集合定义:

define(function(require) {
    var Backbone = require('backbone'),
        m = require('../models/m');
        require('backbone.localstorage');

    var c = Backbone.Collection.extend({
        model: m,
        localStorage: new Backbone.LocalStorage('queue')
    });

    return new c();
});

在视图中:

define(function(require) {
    var $ = require('jquery'),
        _ = require('underscore'),
        Backbone = require('backbone'),
        c = require('../collections/c');

    var v = Backbone.View.extend({
        ...
        events: {
            'click div': 'updateQueue'
        },
        updateQueue: function($_event) {
            c.add(this.model);
        }
    });

    return v;
});

c.add(this.model); 行根本不起作用,并且集合永远不会保存到 localStorage,每次重新加载页面时都会丢失所有模型。知道我在哪里做错了吗?我正在为 Github 使用最新的 Backbone.localStorage 版本。

编辑:

改为c.create(),它仍然没有将任何内容保存到localStorage。有什么想法吗?

【问题讨论】:

  • c.add(this.model);事件被调用,还是requirejs的问题。

标签: javascript backbone.js local-storage requirejs


【解决方案1】:

尝试调用 create() 函数c.create(this.model);,这会自动保存您的模型。 或者您可以在将模型添加到集合之前保存模型

【讨论】:

  • 改为 c.create() 并且它仍然没有将任何内容保存到 localStorage。有什么想法吗?
  • jsFiddle 很好,它在这个小提琴中工作
  • 不错的小提琴手!真正的问题是 this.model 不是应该添加/创建的,而是 this.model.toJSON() ;)
  • 当您将 this.model.toJSON() 传递给 create() 函数时。在内部,它检查传入的参数是否是一个 backone 模型,如果不是,则使用您传递的任何属性创建一个模型,然后将其添加到集合中,因此它就像重复创建您已经完成的模型的过程。但是,如果您的错误得到解决,那么就可以了 :)
【解决方案2】:

如果您将模型添加到集合中,并不意味着它已保存。您必须自己调用 save 方法。

建议改用create

【讨论】:

    【解决方案3】:

    发现错误:

    updateQueue: function($_event) {
        c.create(this.model);          // wrong
        c.create(this.model.toJSON()); // correct!
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 2013-03-19
      • 2014-07-29
      相关资源
      最近更新 更多