检索模型中的嵌套属性

时间:2016-02-15 20:45:54

标签: backbone.js backbone-views backbone-model

对于我的生活,我无法弄清楚如何在我的模型中获得一些属性。

我定义了我的reportUrl模型:

    var ReportUrl = Backbone.Model.extend({
        urlRoot: '/api/report/test/'
});

然后在我看来,我像这样获取它,并将其添加到我的测试模型中。注意 - 它只为每个测试提取一个URL:

            var reportUrl = new ReportUrl({ id: test.id });
            reportUrl.fetch();
            test.set({
                reportUrl: reportUrl
            });
                var view = new reportUrlView({
                    model: test
                });

如果我把它写出来,我可以在浏览器控制台中看到它(见下面的截图)。我只是无法弄清楚如何访问我需要的数据。

我需要获取serverUrl和reportExt属性。

所以我像这样定义'this.reportUrl': this.reportUrl = this.model.get('reportUrl');

如果我这样做

console.log('this.reportUrl:', this.reportUrl); 

我看到这个屏幕: enter image description here

但是我在尝试获取所需属性时失败了:

this.reportUrl.get('serverUrl') = undefined
this.reportUrl.serverUrl = undefined

this.model.attributes.reportUrl.get('serverUrl') = undefined
this.model.attributes.reportUrl.serverUrl = undefined
this.model.attributes.reportUrl.attributes.serverUrl = undfined

这是产生任何东西的唯一一条线:

当我拨打新的ReportUrl时,

this.model.attributes.reportUrl.attributes = id: xxxxxx ^^ the test.id above

那么无论如何都要访问这些属性吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

您的主要问题是fetch()是异步执行的。

您在控制台中看到的是请求完成后的数据,但您的代码之前执行,因此返回undefined

您的代码应为

var reportUrl = new ReportUrl({ id: test.id });
reportUrl.fetch({
    success:function(model,response){
      test.set({
         reportUrl: model
      });
      var view = new reportUrlView({
         model: test
      });
   }
});

var reportUrl = new ReportUrl({ id: test.id });
reportUrl.fetch().then(function(){
  test.set({
     reportUrl: reportUrl
  });
  var view = new reportUrlView({
     model: test
  });
});

不确定为什么要将模型设置为另一个模型 - 看起来您需要的只是执行test.fetch(),并且您的后端shold会返回一个对象reportUrl,其中包含所需的数据作为响应。那会更清洁。

无论如何,您可以访问this.model.get('reportUrl').get('serverUrl')等属性,假设this指向您的视图。

this.model.attributes.reportUrl.attributes.serverUrlthis.model.get('reportUrl').attributes.serverUrlthis.model.attributes.reportUrl.get('serverUrl')等也应该有效,但这不是实现目标的主干方式。