【问题标题】:Specify extra attributes when adding to a collection添加到集合时指定额外的属性
【发布时间】:2014-04-30 12:33:31
【问题描述】:

我们有一个主干/木偶应用程序在工作,还有一个同事,我想知道最好的方法是什么。这是我们希望做的简化示例。

你有一个员工列表要显示在你的前端,你显示的字段是:

  • 员工参考
  • 名字
  • 姓氏

但是同一个页面上用于创建人的表单也需要

  • 出生日期

(我已经大大简化了这个示例 - 我们代码中的 dateOfBirth 实际上是几个选择元素,我们宁愿不必忽略返回模型的某些部分。)

处理这个问题的最佳方法是什么?理想情况下,我们希望在本例中通过 REST(POST) 传递 4 个属性,但返回的模型应该只有 3 个属性。

我在 Google 上搜索过,但大多数示例都非常简单,并且处理发送和发送的相同属性。在此先感谢:)

【问题讨论】:

    标签: javascript json backbone.js marionette


    【解决方案1】:

    您在谈论 A.)您拥有的数据(对象模型)和 B.)视图模型。

    排除映射是您不需要的额外逻辑,您可以创建另一个模型并继承默认值并扩展它们,或者可能只创建另一个包含您需要的相同和额外成员的视图模型。

    所以实际上缺少的是另一个模型,它是数据的表示(视图模型),它包括/不包括出生日期/其他数据。

    然后您可以使用视图中的数据更改常规模型并将其保存:

    reulgarModel.set(_.omit(viewModel.toJSON(),"dateOfBirth"));
    

    【讨论】:

      【解决方案2】:

      您可以覆盖模型的解析函数来做到这一点:

      var myModel = Backbone.Model.extend({
         parse: function(response, options){
            delete response.dateOfBirth;
            return response;
         }
      });
      

      请注意,这会改变响应对象,您最好将其克隆到一个新对象中,或者只是迭代属性并在某处构建一个排除映射 - 您可以使用这些选项。

      【讨论】:

        【解决方案3】:

        只是从@Alexanders 回答继续,但您可以在集合的解析函数中创建模型的新实例,并仅返回集合所需的 JSON 位。这是一个例子:

        parse: function(response) {
        
          if(response.data.dateOfBirth){
            //Create a new model to hold the date of birth selects
            var dobSelect = new DateOfBirthSelects();
        
            dobSelect.set("days", response.data.dateOfBirth.days);
            dobSelect.set("months", response.data.dateOfBirth.months);
            dobSelect.set("years", response.data.dateOfBirth.years);
        
          };
        
        
        
          // Return the employee data to create the collection
          return response.data.employees;
        

        引用的 JSON 如下所示:

        ...
        data:{
        "employees":[
        {
        "employeeReference": 123
        "firstName": "John"
        "lastName": "Smith"
        },
        {
        "employeeReference": 124
        "firstName": "Jean"
        "lastName": "Smith"
        }
        ],
        "dateOfBirth":{
        "days":["01","02","03"...],
        "months":["01","02","03"...],
        "years":["1991","1992","1993"...],
        }
        
        }
        ...
        

        【讨论】:

          猜你喜欢
          • 2017-04-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多