有了这个人为的示例代码:
var Product = Backbone.Model.extend({
idAttribute: '_id',
url: '/rest/product',
});
var Cart = Backbone.Collection.extend({
model: Product,
url: '/rest/cart',
});
p1 = new Product({name: 'Keyboard'});
p2 = new Product({name: 'Mouse'});
c = new Cart();
c.add([p1, p2]);
c.sync();
Run Code Online (Sandbox Code Playgroud)
我看到Error: A "url" property or function must be specified有大量的帖子围绕着同样的错误消息,但我发现的所有帖子都是,恰当地,没有在途中定义的url属性或函数的结果.
我觉得我好像错过了某个链接步骤 - 也许我隐含地依赖于Backbone.js实际上并没有自动设置的"魔术"连接/回调/属性/属性?
我不认为你应该直接打电话sync; 我认为您正在寻找的是c.fetch()(或者p1.save(); p2.sav2(),取决于您尝试发送数据的方向).同步正是骨干内部使用它做它的fetch/ save(如果你想改变的AJAX细节如何确实它们,然后同步存在您覆盖,否则你不应该需要它).
如果你想方便地保存集合中的每个模型,你可以使用Underscore内置到集合方法"调用"(你应该可以做c.save(),但我想你不能):
c.invoke('save');
Run Code Online (Sandbox Code Playgroud)
我首先退一步检查您的用例和您选择的模式。您显然正在尝试将产品添加到用户的购物车中。
我看到的问题是您已将购物车设为集合。我建议将购物车制作为包含产品集合的模型。
var ProductCollection = Backbone.Collection.extend({
model : Product
});
var Cart = Backbone.Model.extend({
url : '/rest/cart',
defaults : {
products : new ProductCollection()
}
});
Run Code Online (Sandbox Code Playgroud)
使用这个新架构,您可以执行以下操作:
var c = new Cart();
c.get('products').add([p1, p2]);
c.save();
Run Code Online (Sandbox Code Playgroud)
此架构的另一个好处是您可以在购物车中包含其他数据属性,例如客户 ID、创建购物车的时间等。
| 归档时间: |
|
| 查看次数: |
3378 次 |
| 最近记录: |