【问题标题】:How to deal with dynamic properties in Backbone and sync to database如何处理 Backbone 中的动态属性并同步到数据库
【发布时间】:2013-04-17 21:01:27
【问题描述】:

过去几天,我一直在与 Backbone 作斗争,试图以最佳方式处理用户添加的一些动态元素,并成功地将这些元素与数据库同步。我有一个模型和一个视图。

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

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

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

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

例如

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

我的想法是我显然需要在模型中包含某种嵌套的 JSON,但我不知道如何正确编写它。非常感谢任何帮助或为我指明正确方向的东西。

【问题讨论】:

    标签: javascript jquery backbone.js


    【解决方案1】:

    好的,这个解决方案涉及 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);
    }
    

    【讨论】:

    • 虽然我可能同意这是最有效的方法,但“主干”方法不是将每个颜色条目作为模型,并有一个嵌套集合吗?可能有点矫枉过正,但 TODO 项目的信息也很少,而且它仍然是集合中的模型,对吧?我不确定自己有什么更好的...
    • @EranMedan 你是对的,这更像是 Backbone 的方式。虽然我考虑到你会想要保存你的 T 恤模型,因此会希望 colors 键是 JSON。将颜色作为一个集合意味着您必须在保存之前将其更改为 JSON。此外,这意味着更多的代码 :p 但这仍然可行。
    • 感谢 Loamhoof 的回复,巧合的是,您的解决方案与我的解决方案非常相似。就像你说的那样,它只是感觉不太像做它的主干方式,我不禁认为我错过了一些东西,应该有更好的方法来做它
    猜你喜欢
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 2023-04-01
    • 1970-01-01
    • 2013-02-19
    相关资源
    最近更新 更多