解释从api控制器接收的主干集合数据

时间:2015-09-11 15:20:51

标签: javascript json backbone.js backbone-views backbone-collections

我尝试使用简单的集合和视图将我的骨干集合中的数据写入我的网站。我只想迭代集合并在我的模板中显示Id,Name等属性。

我的收藏从api控制器获取数据(数据样本如下所示)。

我的有限知识让我猜测api控制器正在返回一个对象,而不是JSON。

所以我猜测这会搞砸我的结果。我已将该收藏集写入我的Chrome控制台,并附上了我在下面看到的内容的屏幕截图。

所以看看下面的代码,有没有一种方法可以格式化从api返回的数据,以便我的集合可以有效地使用它?

以下是代码:

   var ResearchCollection = Backbone.Collection.extend({
       url: '/api/lab',

       getresearch: function() {
           this.fetch({
               url: this.url
           });
       }
   });

var researchCollection = new ResearchCollection();

return Backbone.View.extend({
    className: 'labRender',
    template: _.template(tmpl, null, { variable: 'x' }),

 render: function () {
        researchCollection.getresearch();
        console.log('collection: ', researchCollection);
     }

基本上,我只想迭代我的收藏并在我的模板中显示Id,Name等属性。

以下是我用来填充我的集合的api控制器的原始数据:

{
  "odata.metadata":"http://sol.edu/SOM/Api/v1/$metadata#ApiKeys","value":[
    {
      "odata.id":"http://sol.edu/SOM/Api/v1/ApiKeys('2f2627ed-3a97-43aa-ac77-92f227888835')","Id":"2f2627ed-3a97-43aa-ac77-92f227888835","Name":"VideoSearch","TimeoutInMinutes":20160,"IsDefault":false,"CreateAuthTicketsForResources":false,"ReportAuthFailureAsError":false,"ExcludePrivatePresentations":true,"Internal":true,"ViewOnlyAccessContext":true
    }
  ]
}

当用管道传输到控制台时(为什么每个角色都是一个单独的属性?):

enter image description here

1 个答案:

答案 0 :(得分:1)

我想也许这是因为你混淆了收藏和模特。在Backbone中,Model是基本单位,Model可用于呈现模板。但是,Collection是有序的'模型&#39}。因此,如果您只想转换上述数据,最好选择Model代替'收集'。试试这个:

var ResearchModel = Backbone.Model.extend({

       initialize: function(attributes) {
           this.url = 'api/lab'
       }
   });

// when you initialize a Model or collection, the first parameter is the attribute you want to initialize
var researchModel = new ResearchModel({});

return Backbone.View.extend({
    className: 'labRender',
    template: _.template(tmpl, null, { variable: 'x' }),

 render: function () {
        researchModel.fetch();
        console.log('collection: ', researchModel);
     }

否则,如果您只想使用集合,最好指定其Model。Backbone使用JSON,因此您也可以使用密钥指定模型。