如何从Ember CLI中的Route访问Ember Model

时间:2014-04-24 18:10:20

标签: ember.js ember-model ember-cli

也许使用常规Ember应用程序执行此操作,将所有代码放在app.js中对我来说会更容易。但由于我使用的是Ember CLI,因此无法在我的路线中访问我的模型。我还在尝试学习如何使用Ember CLI,所以请帮帮我。

由于我只想触发AJAX调用并在我的UI上呈现数据,我下载并将Ember Model库添加到我的项目中。我不认为需要使用Ember Data。这是我引用的Ember Model文档:https://github.com/ebryn/ember-model#example-usage。话虽如此,这是Ember CLI提出的目录结构:

|-app    
  |-controllers
  | |-customers.js
  |-models    
  | |-customers.js
  |-routes    
  | |-customers.js
  |-templates    
  | |-customers.hbs
  |-app.js
  |-index.html
  |-main.js
  |-router.js

这是对我只关注问题的实际项目结构的简单表示。正如Ember模型文档中提出的,我将以下代码添加到我的Customers模型(model \ customers.js)中:

export default Ember.Model.extend({
    nameid: attr(),
    firstname: attr(),
    middlename: attr(),
    lastname: attr(),        
    prefixname: attr(),
    suffixname: attr()
});

this.url = "http://restapi/api/customers";
this.adapter = Ember.RESTAdapter.create();

请注意,我必须执行"导出默认值"而不是" App.Customers = Ember.Model.extend ..."。这是Ember CLI惯例。因此,当我尝试访问我在Customers Route中创建的模型时,我收到错误"加载路径时出错:ReferenceError:App未定义" ..

客户路线代码:

export default Ember.Route.extend({
    model: function () {
        App.Customers.find();
    },

    actions: {
        addnew: function(){
            //logic of saving edited customer
            alert('customer created!');
        }
    }
});

我试过this.model() - 返回supperWrapper类型的对象和this.modelFor() - 返回null。

请建议如何在路线中处理我的模型,以便我可以执行Ember Model开箱即用的CRUD操作。

谢谢!

1 个答案:

答案 0 :(得分:16)

我建议您将模型的文件名更改为单数,例如customer.js

如果要访问路径文件中的模型类,则必须导入模型。由于Ember CLI使用ES6模块语法,因此您无法直接访问App对象上的任何内容。这应该通过import语句或Ember内部通过解析器来完成。

import Customer from "../models/customer";

现在您可以在模型钩子中使用它。您的示例代码中还有另一个错误,您必须从查找调用返回承诺。

model: function () {
  return Customer.find();
},

我很好奇为什么你选择了Ember Model而不是Ember Data,因为在这个例子中你需要更少的Ember数据代码,它更像是Ember方式的AFAIK。