【问题标题】:EmberJS: stuck with initial routing, controllers and templates with v1.11.0 (noobie)EmberJS:坚持使用 v1.11.0 (noobie) 的初始路由、控制器和模板
【发布时间】:2015-04-20 08:03:14
【问题描述】:

我是 EmberJS 的新手,我使用 ember-cli 建立了一个简单的项目,我的应用程序中有以下代码: routes/person.js

 import Ember from "ember";
 export default Ember.Route.extend({
  setupController: function(controller, person) {
    controller.set('model', person);
  },

  model: function() {
    return this.store.find('person', 1); // returns a promise that will resolve
  },
});

models/person.js

import DS from "ember-data";

let Person = DS.Model.extend({
    name: DS.attr('string'),
    birthDate: DS.attr('string'),
});

Person.reopenClass({
  FIXTURES: [
    { id: 1, name: 'Jack Sparrow', birthDate: 'Glowacki' },
    { id: 2, name: 'Long John Silver' , birthDate: 'Dale'     }
  ]
});

export default Person;

controllers/person.js

import Ember from "ember";
export default Ember.ObjectController.extend({
    findPerson: function(){
        //do a HTTP call to the mzalendo API
    },

});

router.js

import Ember from 'ember';
import config from './config/environment';

var Router = Ember.Router.extend({
  location: config.locationType
});

export default Router.map(function() {
      this.route('person', { path: '/person' });

});

templates/person.hbs

<strong>Name: {{name}} </strong>

当我运行服务器并转到http://localhost:4200/persons 时,没有加载任何内容并且没有错误,我在这里遗漏了什么吗?

编辑

启动 JS 控制台并看到此错误:

GET http://localhost:4200/people 404 (Not Found)jQuery.ajaxTransport.send @ jquery.js:9659jQuery.extend.ajax @ jquery.js:9210ember$data$lib$system$adapter$$Adapter.extend.ajax @ rest-adapter.js:792initializePromise @ ember.debug.js:46984Promise @ ember.debug.js:48612ember$data$lib$system$adapter$$Adapter.extend.ajax @ rest-adapter.js:776ember$data$lib$system$adapter$$Adapter.extend.findAll @ rest-adapter.js:371ember$data$lib$system$store$finders$$_findAll @ finders.js:115ember$data$lib$system$store$$Service.extend._fetchAll @ store.js:997ember$data$lib$system$store$$Service.extend.fetchAll @ store.js:570ember$data$lib$system$store$$Service.extend.findAll @ store.js:978ember$data$lib$system$store$$Service.extend.find @ store.js:514model @ persons.js:7EmberObject.default.extend.deserialize @ ember.debug.js:22623applyHook @ ember.debug.js:46611HandlerInfo.runSharedModelHook @ ember.debug.js:44612subclass.getModel @ ember.debug.js:44838__exports__.bind @ ember.debug.js:46480tryCatch @ ember.debug.js:46937invokeCallback @ ember.debug.js:46949publish @ ember.debug.js:46920(anonymous function) @ ember.debug.js:27239Queue.invoke @ ember.debug.js:871Queue.flush @ ember.debug.js:936DeferredActionQueues.flush @ ember.debug.js:741Backburner.end @ ember.debug.js:166Backburner.run @ ember.debug.js:221Backburner.join @ ember.debug.js:240run.join @ ember.debug.js:15966run.bind @ ember.debug.js:16021jQuery.Callbacks.fire @ jquery.js:3143jQuery.Callbacks.self.fireWith @ jquery.js:3255jQuery.extend.ready @ jquery.js:3467completed @ jquery.js:3498
ember.debug.js:24085 Error while processing route: persons Not Found Error: Not Found
    at ember$data$lib$system$adapter$$Adapter.extend.ajaxError (http://localhost:4200/assets/vendor.js:62085:35)
    at ember$data$lib$system$adapter$$Adapter.extend.ajax.Ember.RSVP.Promise.hash.error (http://localhost:4200/assets/vendor.js:62160:45)
    at jQuery.Callbacks.fire (http://localhost:4200/assets/vendor.js:3345:30)
    at Object.jQuery.Callbacks.self.fireWith [as rejectWith] (http://localhost:4200/assets/vendor.js:3457:7)
    at done (http://localhost:4200/assets/vendor.js:9513:14)
    at XMLHttpRequest.jQuery.ajaxTransport.send.callback (http://localhost:4200/assets/vendor.js:9915:8)

不确定 /people 路线来自哪里

【问题讨论】:

    标签: javascript ember.js


    【解决方案1】:

    要解决您的问题,您需要将set the application adapter 发送至FixtureAdapter

    $ ember g adapter application
    

    然后

    // adapters/application.js
    import DS from "ember-data";
    
    export default DS.FixtureAdapter.extend({});
    

    编辑

    您还需要在您的个人路由中加载记录:

    $ ember g route persons
    

    然后:

    //routes/persons.js
    
    export default Ember.Route.extend({
      model: function() {
        return this.store.find('person');
      }
    });
    

    据我所知,这是因为 FixtureAdapter 不像 RESTAdapter 那样为您设置智能默认值。

    编辑 2:

    Ember 有一个变形器。所以对于 Ember 来说,person 的复数形式是 people,你可以在浏览器控制台看到 Ember.Inflector.inflector.pluralize('person') //=&gt; "people"

    所以只需将routes/persons.js 重命名为routes/people.js 并访问/people

    附:你不应该需要那个setupController。你的 model 钩子已经做到了。

    【讨论】:

    • 添加了适配器并删除了 setUpController,仍然没有加载,错误会帮助我弄清楚发生了什么..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多