如何处理Backbone中的动态属性并同步到数据库

时间:2013-04-17 21:01:27

标签: javascript jquery backbone.js

过去几天,我一直在努力研究如何最好地处理用户添加的一些动态元素并与数据库成功同步。我有一个模型和一个视图。

创建的模型非常简单,它代表数据库中的产品(T恤),并具有以下属性:ID,价格,尺寸,品牌,颜色。

我面临的问题是colors属性。颜色不能通过设计预先填充(可能不幸),以允许用户输入任何自定义颜色并根据需要自由命名。除名称外,用户还必须指定颜色是否可用。单击“添加文本”按钮/链接将在下面的div中附加一个输入字段和下拉列表。

我的问题:将这些多个颜色属性添加为模型的ONE属性的最佳方法是什么?

当我尝试使用API​​作为colors属性插入或更新自身并进入db(mysql)中的一行时,我需要将所有颜色/可用性值作为一个属性。我相信后端程序员将此行配置为TEXT类型。

e.g。

{"colors": [{"blue":true},{"orange":false},{"white":false}]}

我的想法是我需要在模型中显然有某种嵌套的JSON,但我无法弄清楚如何正确地编写它。任何帮助或某些事情指向我正确的方向将非常感激。

enter image description here

1 个答案:

答案 0 :(得分:2)

好的,这个解决方案涉及jQuery可能有点太多了,但应该可以正常工作。基本上,请同时听取颜色文本框的更改并选择:

events: {
  'change .colorText': 'setColor',
  'change .colorSelect': 'setColor'
},
setColor: function() {
  // here make your `color` attribute's array
  var colors = [];
  this.$('.colorText').each(function() {
    var val, color;
    // adapt the next to navigate to the corresponding select...
    (val = $(this).val()) && (((color = {})[val] = $(this).next().val()) || 1) && colors.push(color);
  });
  this.model.set('colors', colors);
}