使用没有数据源的Backbone Collection(没有url)

ozp*_*cha 8 backbone.js marionette

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

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

我在这里阅读(在backbone.js中,一个Model可以没有任何url?),这是可能的,甚至可以在不提供url的情况下使用集合.

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

myCollection.create(data);
Run Code Online (Sandbox Code Playgroud)

但当然现在抛出一个错误:

Uncaught Error: A "url" property or function must be specified
Run Code Online (Sandbox Code Playgroud)

有没有办法使用Backbone集合,能够向其添加新的数据行(模型),但不能同步到任何类型的数据源.或者你能建议另一个解决方案.

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

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

提前致谢.

mVC*_*Chr 17

有一两件事你可以做的是重写Backbone.Model与服务器,即沟通方法sync,fetchsave...例如:

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'};
Run Code Online (Sandbox Code Playgroud)

见演示

  • 也许值得注意的是,您还可以在模型定义中指定`sync`,`fetch`和`save`方法,而无需引用原型链. (3认同)