使用骨干在车把中迭代

时间:2012-10-14 03:27:51

标签: javascript json backbone.js handlebars.js

我使用骨架和把手进行模板化,我对此有了新的认识。 我当前的json采用以下格式,代码工作正常。

[
  {
    "id": "10",
    "info": {
        "name": "data10"
    }
  },
  {
    "id": "11",
    "info": {
        "name": "data11"
    }
  }

]

但是,当我将我的json结构更改为如下所示的内容时,我很难将内容填充。

{
"total_count": "10",
"dataElements": [
    {
        "id": "10",
        "info": {
            "name": "data10"
        }
    },
    {
        "id": "11",
        "info": {
            "name": "data11"
        }
    }
]
}

如何填充保存当前代码结构的name,info和total_count?

JSFiddle:http://jsfiddle.net/KTj2K/1/

任何真正有用的帮助。

1 个答案:

答案 0 :(得分:2)

为了实现这一点,您需要做一些事情。

使用可以了解您传递给它的数据的自定义内容替换Backbone的核心'重置'。例如:

reset: function (data) {
    this.totalCount = data.total_count;
    Backbone.Collection.prototype.reset.call(this, data.dataElements);
}

现在,当您重置集合时,它会将total_count拉出您正在重置它的对象,并使用Backbone的核心重置与dataElement数组。请记住,如果您打算从服务器中提取此信息,则可能需要使用“解析”执行类似操作。

我建议(如果您的示例看起来与您正在使用的实际代码类似),请在重新渲染之前重置您的集合。

var dataCollectionList = new dataCollection();
dataCollectionList.reset(jsonData);
var App = new AppView({model : dataCollectionList});

现在在您的视图的“渲染”方法中,您可以从集合中获取'totalCount'属性 -

render : function() {
    //Should spit the total count into the element, just as an example
    this.$el.append(this.model.totalCount); 
    //or console.log it
    console.log(this.model.totalCount);
    return this;   
}

瞧。旁注 - 作为与Backbone一起工作的人,当人们设置类似“模型”(即peopleModel,itemModel等)的属性时,它会让我疯狂,并最终成为骨干集合。在它之后命名它更清楚 - 虽然一些MVC纯粹主义者可能会有点不同意。

此外,在此代码块中:

_.each(this.model.models, function (myData) {
            $(this.el).append(new ItemView({model:myData}).render().el);
        }, this);

您无需执行_.each(this.model.models.......)。由于您正在使用集合,因此该集合具有内置的“每个”方法。

this.model.each(function (myData) { ..... } , this);

相当干净。