也许使用常规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操作。
谢谢!
答案 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。