0

我正在使用主干和车把进行模板制作,对此我很陌生。我当前的 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"
        }
    }
]
}

我如何填充名称、信息和总计数保持当前代码结构?

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

任何帮助真的很受欢迎。

4

1 回答 1

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);

干净了很多。

于 2012-10-14T05:32:50.587 回答