8

也许对我来说,使用所有代码都位于 app.js 中的常规 Ember 应用程序执行此操作会容易得多。但由于我使用的是 Ember CLI,我无法在我的 Route 中访问我的模型。我仍在尝试学习如何使用 Ember CLI,所以请帮助我。

因为我只想触发 AJAX 调用并让数据在我的 UI 上呈现,所以我下载了 Ember 模型库并将其添加到我的项目中。我认为不需要使用 Ember Data。这是我指的 Ember 模型文档: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 模型文档中所建议的那样,我将以下代码添加到我的客户模型 (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 约定。因此,当我尝试访问在客户路线中创建的模型时,我收到错误“加载路线时出错:ReferenceError:未定义应用程序”..

客户路线代码:

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 操作。

谢谢!

4

1 回答 1

16

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

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

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

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

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

我很好奇你为什么选择 Ember 模型而不是 Ember Data,因为对于这个例子,你需要更少的 Ember Data 代码,它更像是 Ember 方式 AFAIK。

于 2014-04-24T18:34:36.920 回答