检索模型中的嵌套属性

retrieve nested attributes in 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); 

我看到这个屏幕:

但是我尝试获取所需属性的所有尝试都失败了:

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

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

this.model.attributes.reportUrl.attributes = id: xxxxxx ^^ the test.id above 当我调用新的 ReportUrl.

那么是否可以访问这些属性?

谢谢!

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

您在控制台中看到的是请求完成后的数据,但您的代码执行之前,因此 returning 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(),并且您的后端显示 return 一个对象 reportUrl响应所需的数据。这样会干净很多。

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

this.model.attributes.reportUrl.attributes.serverUrlthis.model.get('reportUrl').attributes.serverUrlthis.model.attributes.reportUrl.get('serverUrl') 等也应该有效,但这不是 backbone 的做法。