【问题标题】:Iteration in handlebar using backbone使用主干在车把中进行迭代
【发布时间】:2012-10-14 03:27:51
【问题描述】:

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

非常感谢任何帮助。

【问题讨论】:

    标签: javascript json backbone.js handlebars.js


    【解决方案1】:

    您需要做一些事情才能使其正常工作。

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

    相当干净。

    【讨论】:

    • 我根本不是 MVC 纯粹主义者会使用 Backbone。而且,像大多数纯粹主义者一样,欢迎他们坐在角落里愤怒地自言自语,而我们其他人则完成了一些工作:) 并且 Backbone 视图特别对待 collection option 就像对待 model 选项一样,所以是的,那真的应该是this.collectionnew View({ collection: ... })
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-06
    • 2018-06-07
    • 2017-07-09
    • 2012-12-30
    • 1970-01-01
    相关资源
    最近更新 更多