【问题标题】:Using a Backbone Collection without a data source (no url)使用没有数据源的主干集合(无 url)
【发布时间】:2013-08-21 08:56:03
【问题描述】:

第一次在这里发帖......期待看看它是如何运作的,但非常感谢阅读其他人的问题和答案。

我正在为一个小型应用程序使用主干,并发现使用集合来存储一些仅在当前会话期间需要的信息很有帮助。 (我有许多集合,所有其他集合都连接到我的 API 以存储/检索数据)。

我在这里 (in backbone.js can a Model be without any url?) 读到,在不提供 url 的情况下使用集合是可能的,甚至是好的。

现在我想向集合中添加一行数据...简单:

myCollection.create(data);

但当然现在会引发错误:

Uncaught Error: A "url" property or function must be specified

有没有办法使用 Backbone 集合,能够向其中添加新的数据行(模型),但不能同步到任何类型的数据源。或者您能否提出其他解决方案。

我想我可以只使用一个对象来保存数据,但我很享受一致性和功能性。

如果有任何影响,我正在使用 Backbone.Marionette。

提前致谢。

【问题讨论】:

    标签: backbone.js marionette


    【解决方案1】:

    您可以做的一件事是覆盖与服务器通信的Backbone.Model 方法,即syncfetchsave...例如:

    var App = {
        Models: {},
        Collections: {}
    };
    
    App.Models.NoUrlModel = Backbone.Model.extend({});
    App.Models.NoUrlModel.prototype.sync = function() { return null; };
    App.Models.NoUrlModel.prototype.fetch = function() { return null; };
    App.Models.NoUrlModel.prototype.save = function() { return null; };
    
    App.Collections.NoUrlModels = Backbone.Collection.extend({
        model: App.Models.NoUrlModel,
        initialize: function(){}
    });
    
    var noUrlModels = new App.Collections.NoUrlModels();
    noUrlModels.create({'foo': 'bar'});  // no error
    // noUrlModels.models[0].attributes == {'foo': 'bar'};
    

    See Demo

    【讨论】:

    • 非常清晰简洁的解释。谢谢你。我没有意识到覆盖这样的方法是如此容易!
    • 也许值得注意的是,您也可以在模型定义中指定syncfetchsave方法,而无需参考原型链。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多