Backbone:将模型添加到集合中

时间:2014-12-22 20:17:58

标签: backbone.js collections views add repeat

一方面,我有三个CollectionsView(从服务器获取三种类型的模型),另一方面,我有四分之一的CollectionView,就像一个购物车。这将存储与视图关联的其他三个集合中的项目(集合视图)。

问题是当我添加一个具有相同ID的项目时,这个项目被编辑,而不是添加到购物车CollectionView。

示例:

function addToCart(model){
     ShoppingCartCollectionView.collection.add(model);
}

来自其他系列:

// From one CollectionView
addToCart(this.model);

// From another CollectionView
addToCart(this.model);

此集合具有相同的ID,因为它们存储在服务器上的不同数据库中。

这是我的模型(Python ORM)

PRODUCT_TYPE = (
    ('EM', 'Empanada'),
    ('BE', 'Bebida'),
    ('OF', 'Oferta'),
)

# Create your models here.
class Producto(models.Model):

    nombre = models.CharField(max_length=50)
    precio_unidad = models.DecimalField(max_digits=8, decimal_places=2)
    descripcion = models.TextField()
    stock = models.IntegerField()
    status = models.BooleanField(default=True)
    imagen = models.ImageField(upload_to=upload_to)
    fecha_publicacion = models.DateTimeField(auto_now_add=True)

    class Meta:
        abstract = True


class Empanada(Producto):

    precio_docena = models.DecimalField(max_digits=8, decimal_places=2)
    product_type = models.CharField(max_length=2, choices=PRODUCT_TYPE, default='EM', editable=False)

    def __unicode__(self):
        return self.nombre


class Bebida(Producto):

    product_type = models.CharField(max_length=2, choices=PRODUCT_TYPE, default='BE', editable=False)

    def __unicode__(self):
        return self.nombre


class Oferta(Producto):
    product_type = models.CharField(max_length=2, choices=PRODUCT_TYPE, default='OF', editable=False)
    def __unicode__(self):
        return self.nombre

class Venta(models.Model):

    pedido = models.TextField()
    total = models.DecimalField(max_digits=8, decimal_places=2)
    status = models.BooleanField(default=True)
    fecha_publicacion = models.DateTimeField(auto_now_add=True)

如何解决这个问题?

感谢!!!

1 个答案:

答案 0 :(得分:0)

@KimGysen正在考虑重组您的产品表。从长远来看,使用相同id的不同产品会给您带来问题。这是一个可能适合您的数据库架构。

使用外键表

首先,您有一个产品名称表,您可以在其中列出不同产品的名称,并为每种产品类型指定主键(ID)。然后,对产品的不同属性进行分组,并为每个组创建单独的表。在表格中,您可以通过ID(这是您的外键)来引用原始产品类型。这是一个简单的图表:

/*Name Table                             Prod Type 1
-------------------------------        ---------------------------------
| ID | Product Name | Prod Type        | ProdId | attr1 | ... |  attrN |
-------------------------------        ---------------------------------
| 1  | Product 1    |    1    |        |    1   | val1  | ... | valN   |
-------------------------------        ---------------------------------*/    

使用collection.set

或其附近工作

您的另一个选择是覆盖Backbone中的collection.set方法,该方法负责识别您的集合中是否存在重复项。

作弊collection.set

如果您遇到问题,因为您添加两种具有相同ID的不同类型的产品,可以通过确保collection.set属性被称为id以外的其他内容来欺骗id (这是用于评估集合中是否必须使用相同模型的集合,除非您通过在模型定义中设置idAttribute属性来指示它检查其他属性。然后collection.set将不知道如何匹配传入的模型。

覆盖collection.set

如果您遇到问题,因为collection.set未存储您的收藏中已有的模型,则您必须覆盖collection.set。如果这是你正在寻找的解决方案,请告诉我,我会在这里发布答案。

创建新的ShoppingCart模型

第三种可能性是拥有一个处理模型添加和删除的ShoppingCart模型。这是一个更复杂的解决方案。如果您提供有关如何使用购物车的更多详细信息,我可以就如何开始使用提供一些想法。