【问题标题】:Ember: Cannot access model data in controller/templateEmber:无法访问控制器/模板中的模型数据
【发布时间】:2016-11-18 06:14:30
【问题描述】:

我是 ember 框架的新手,在访问 ember 数据时遇到问题或疑问。我将 ember-cli 和 ember-cli-mirage 用于演示目的。

config.js

export default function() {
this.get('/newcontracts', function(db, request) {

 return {
   data:[{
     "type": "newcontracts",
     "id": 1,
     "attributes": {
         "department-type": ["Legal", "Sales"],
         "agreement-type": ["Service Agreement", "Purchase"],
         "renewal-type": ["One time", "None"]
     }
  }]
 }
});

Ember 商店

export default Model.extend({
   "type": "",
   "department-type": attr(""),
   "agreement-type": attr(""),
   "renewal-type": attr("")
});

路由器

export default Ember.Route.extend({
     model: function(){
        console.log(this.get('store').findAll('newcontract')) // outputs ember class
        return this.get('store').findAll('newcontract');
     });

控制器

 export default Ember.Controller.extend({
  details: Ember.computed('model', function() {
   return this.store.peekRecord('new-contract', 1) // --> outputs ember class
    //console.log(this.store.peekRecord('new-contract', 1).get('department-type)) ---> desired output(array)
  })
  departmentDetails: Ember.computed('model', function() {
    this.details.get('department-type') ; ///error
  })

});

模板

{{log "model" details}} --> ember class
{{log "model" model}} --> ember class
{{log "model" model.department-type}} --> undefined

我不能像那样访问部门详细信息吗?如果我使用 details 属性中的注释行,我会得到所需的数据。我应该从商店单独获取每个数据吗?此外,将值记录到模型中会得到一个 Ember 类。

即使在模板文件中,也无法获取model.department-type等的值

我在 Ember chrome 检查器中正确获取了数据。 仅供参考,我使用的是 ember 2.5.1。请帮我解决这个问题。

【问题讨论】:

  • Inisde 你的模型有类型字段背后的想法是什么。您正在使用 JsonApi 适配器吗?此外,您的属性是数组,Legal..Sales...您是否要使用类似数组。我可以提供一些提示,但不确定您要如何使用部门类型...在选择内?
  • 如果你不想指定转换,你应该使用atr(),而不是attr("")。您还需要在departementDetails 中执行this.get('details')
  • model 和 details 都是 ember 可枚举的,所以你可以枚举它来获取数据.. 参考 stackoverflow.com/questions/37380384/…

标签: javascript ember.js ember-data ember-cli-mirage


【解决方案1】:

this.get('store').findAll('newcontract'); 给你一个新合约数组。

在模板中记录model[0].department-type 将打印department-type

要回答您的问题,您不是在任何地方访问departmentDetails,而是在控制器中创建一个。

此外,您不能直接访问像details 这样的计算属性,您应该始终使用get()。所以它的this.get('details').get('department-type') 不是this.details.get('department-type')

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 2017-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2018-01-04
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多