如何使用骨干从嵌套的Json结构中获取和设置模型

时间:2014-07-22 13:16:05

标签: backbone.js model get set

我是Backbone的新手,需要帮助才能使用Backbone从嵌套的Json Structure中获取和设置模型

我有一个简单的模型和集合

型号:

var PmaslDataModel = Backbone.Model.extend({ });

收集:

app.PmaslDataCollection = Backbone.Collection.extend({
          url APPLICATION_URL+'aslview/getformatedDataRows',
          model         : PmaslDataModel 
    });

初始化集合

var pmaslDataCollection =   new app.PmaslDataCollection();

获取上述集合将返回以下Json格式的数据

{
"id"    : "1",
"rowid" : "1",
"group" : "10__",
"datarows": [
             {
               "id": "sspvk_code",
               "default_display": "1",
               "order": "1",

            },
            {
               "id": "sspvk_code2",
               "default_display": "0",
               "order": "0",
           },
           {
               "id": "sspvk_code3",
               "default_display": "1",
               "order": "0",
           }
         ]
},
{
   "id"    : "2",
   "rowid" : "2",
   "group" : "11__",
   "datarows": [
                {
                  "id": "sspvk_code",
                  "default_display": "1",
                  "order": "1",

                },
                {
                   "id": "sspvk_code2",
                   "default_display": "0",
                   "order": "0",
                },
                {
                   "id": "sspvk_code3",
                   "default_display": "1",
                   "order": "0",
                }
            ]
}

我必须使用上面的结构来填充我们有行ID的表中的值,并且行中的列值出现在datarows属性中

我有2个问题

  1. 如何设置" default_display"所有数据行的值都为0 id = sspvk_code?
  2. 如果我有一个特定的行id,我该如何获取数据行 行,将其传递给下划线模板并填充模板(即 是的,在模板中我需要使用model.get访问它(' attributename value')

2 个答案:

答案 0 :(得分:0)

1)最初使用 id default_display 设置为 0 到所有数据行 >" sspvk_code " (这就是你想要的吗?)你可以这样使用 parse 方法,我会说:

app.PmaslDataCollection = Backbone.Collection.extend({
  url   : APPLICATION_URL+'aslview/getformatedDataRows',
  model : PmaslDataModel,

  parse : function (response) {
    // ititerate through entire collection
    _.each(response, function (row) {
      // find datarow with sspvk_code id and set default_display to 0
      _.each(row.datarows, function (datarow) {
        if (datarow.id === "sspvk_code") {
          datarow.default_display = 0;
        }
      })
    })

    return response;
  }
});

2)你的意思是"获取数据行"?您的JSON看起来已经在集合中拥有了数据行。

答案 1 :(得分:0)

  

2.如果我有一个特定的行ID,我该如何获取数据行   行,将其传递给下划线模板并填充模板(即   是,在模板中,我需要使用model.get('attributename   值')?

获取集合后,json数据将被设置为集合中的模型。因此,从集合中,您可以使用Collection's findWhere方法选择具有指定行ID的模型。

在您的情况下,在您的收藏中,

this.findWhere({rowId:2});
  

1.如何为id = sspvk_code的所有数据行设置“default_display”值为0?

我想这应该是服务器负责设置默认值而不是在此设置它。