【问题标题】:Cannot access property of Ember.js model无法访问 Ember.js 模型的属性
【发布时间】:2013-08-03 19:43:27
【问题描述】:

我在访问 Ember.js 中的模型属性时遇到问题

型号:

App.Page = DS.Model.extend({
  title: DS.attr('string'),
  parent: DS.attr('number'),
});

控制器:

App.BlocksController = Ember.ArrayController.extend({

  pages: function() {
    return App.Page.find();
  }.property(),

  pageTree: function() {
    var pages = this.get('pages.content'),
        pageTree = new Tree();
    for(var i = 0; i < pages.length; i++) {
        console.log( pages[i], pages[i].id, pages[i].parent );
    }
    pageTree.insertList(pages);
    return pageTree;
  }.property('pages.@each'),

});

我在模板/视图中使用pageTree 属性。 console.log 确实打印了从 API 检索到的对象(包括 id),但是,我无法访问它的属性(parent 给了我 undefined,但它在 API 响应中)。

一个console.log 行如下所示:

Object {id: "5", clientId: 19, type: function, data: Object, prematerialized: Object…}
"5"
undefined 

我假设使用pages.@each 作为属性,pageTree 属性应该绑定到(加载的)页面数组。

是的,pages 不是由 ArrayController 控制的模型,而是一组辅助模型。

当我在模板中使用{{#each pages}}{{parent}}{{/each}} 时,它可以工作!所以我猜,问题与数据绑定有关?

作为参考,我使用的是 Ember 1.0.0-rc.6.1、ember-data 0.13、ember-data-django-rest-adapter 0.13

【问题讨论】:

    标签: data-binding ember.js


    【解决方案1】:

    好的,感谢 IRC:

    pageTree: function() {
      var pages = this.get('pages'),
        pageTree = new Tree();
      pages.forEach(function(page) {
        //console.log(page, page.get('parent'));
        pageTree.insertAt(page.get('parent'), page );
      });
      return pageTree;
    }.property('pages.@each'),
    

    所以,不是.content,而是forEach.get()

    【讨论】:

    • 所以即使帐户数组长度为 1,您也是这样做的?
    • 即 this.get("accounts.length") === 1 在控制器中 this.get("accounts[0].id") 未定义
    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 2019-03-09
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2015-08-02
    • 2015-10-22
    • 1970-01-01
    相关资源
    最近更新 更多