2013-11-17 2 views
2

У меня есть приложение ember-rails, которое содержит таблицу серверов и ссылку на каждый отдельный сервер.Вложенная ошибка маршрутизации Ember.JS и Rails

Вот главный servers.handlebars файл:

<table id="box-table-a"> 
    <thead> 
     <th>Name</th> 
     <th>Operating System</th> 
     <th>Build Stage</th> 
    </thead> 
    <tbody> 
     {{#each server in controller}} 
     <tr> 
      <td> 
       {{#link-to 'server' server}} 
        {{server.name}} 
       {{/link-to}} 
      </td> 
      <td>{{server.operating_system}}</td> 
      <td>{{server.build_stage}}</td> 
     </tr> 
     {{/each}} 
    </tbody> 
</table> 

{{outlet}} 

который создает соответствующую таблицу, как и ожидалось. А при наведении курсора на имя серверов я буду получать URL в в левом нижнем углу браузера: #/servers/1, #/servers/2, и т.д.

Однако, когда я нажимаю ссылку для отдельного сервера, шаблон сервера не отображаются. Вот мой server.handlebars файл:

<div> 
    <h2> {{name}} </h2> 
    <h2> {{operating_system}} </h2> 
    <h2> {{build_stage}} </h2> 
</div> 

Ниже мой файл server.js.coffee находится в папке JavaScripts/модели:

Warthog.Server = DS.Model.extend 
    name: DS.attr('string') 
    operating_system: DS.attr('string') 
    build_stage: DS.attr('string') 

Мой serversRoute.js.coffee файл:

Warthog.ServersRoute = Ember.Route.extend 
    model: -> @store.find('server') 

Мой serverRoutes.js.coffee файл:

Warthog.ServerRoute = Ember.Route.extend 
    model: (params) -> 
     @store.find('server', params.server_id) 

Последний является router.js.coffee файлом

Warthog.Router.map -> 
    @resource "servers", -> 
    @resource "server", path: "/:server_id", -> 
     @route "edit" 
    @route "create" 

Пожалуйста, обратите внимание, что уголек набор инструментов в Chrome не показывают какие-либо маршрутов и что ошибка только брошена в консоли при попытке перейти к отдельному серверу. Ниже приведена ошибка.

event.returnValue is deprecated. Please use the standard event.preventDefault() instead. jquery.js?body=1:5387 
Ember Debugger Active VM3178:391 
DEPRECATION: Action handlers contained in an `events` object are deprecated in favor of putting them in an `actions` object (error on <Ember.Route:ember430>) 
     at Object.triggerEvent (http://testdomain.warthog.dev/assets/ember.js?body=1:30519:13) 
     at trigger (http://testdomain.warthog.dev/assets/ember.js?body=1:29641:16) 
     at handlerEnteredOrUpdated (http://testdomain.warthog.dev/assets/ember.js?body=1:29537:11) 
     at http://testdomain.warthog.dev/assets/ember.js?body=1:29512:9 
     at eachHandler (http://testdomain.warthog.dev/assets/ember.js?body=1:29559:9) 
     at setupContexts (http://testdomain.warthog.dev/assets/ember.js?body=1:29511:7) 
     at finalizeTransition (http://testdomain.warthog.dev/assets/ember.js?body=1:29835:7) 
     at transitionSuccess (http://testdomain.warthog.dev/assets/ember.js?body=1:29732:13) 
     at invokeCallback (http://testdomain.warthog.dev/assets/ember.js?body=1:8055:19) ember.js?body=1:394 
Error while loading route: TypeError {} ember.js?body=1:394 
Uncaught TypeError: Object function() { 
    var Class = makeCtor(), proto; 
    Class.ClassMixin = Mixin.create(this.ClassMixin); 
    Class.PrototypeMixin = Mixin.create(this.PrototypeMixin); 

    Class.ClassMixin.ownerConstructor = Class; 
    Class.PrototypeMixin.ownerConstructor = Class; 

    reopen.apply(Class.PrototypeMixin, arguments); 

    Class.superclass = this; 
    Class.__super__ = this.prototype; 

    proto = Class.prototype = o_create(this.prototype); 
    proto.constructor = Class; 
    generateGuid(proto, 'ember'); 
    meta(proto).proto = proto; // this will disable observers on prototype 

    Class.ClassMixin.apply(Class); 
    return Class; 
    } has no method 'create' 
+0

Что ошибка бросают в консоли при переходе на маршрут сервера? –

+0

Я обновил вопрос с помощью ошибки – Anconia

+0

Ваш текущий браузер? –

ответ

3

Короткий

Это Коммон ошибка при использовании кофе с угольком, прочертовский вы используете SomeEmberObject.extend вместо SomeEmberObject.extend().

Долгий

При использовании Foo = SomeEmberObject.extend без аргументов, кофе генерировать следующий код:

var Foo; 

// Foo is a reference to extend, this is not what we want 
Foo = SomeEmberObject.extend; 

Поскольку Foo просто refence расширяться, когда Foo.create() называется, это то же самое например, SomeEmberObject.extend.create() и будет выдавать текущую ошибку.

Оповещение: даже если вы не вызываете создание напрямую в коде, ember использует объявленные классы и вызывает создание при выполнении инъекции зависимостей.

С аргументах, функция расширения называется correctlly:

Foo = SomeEmberObject.extend 
    message: 'hello' 

Формирует:

var Foo; 

// ok 
Foo = SomeEmberObject.extend({ 
    message: 'hello' 
}); 

Так что вам нужно заменить в коде, классы объявлены как Foo = SomeEmberObject.extend к Foo = SomeEmberObject.extend().

Например:

// wrong 
Warthog.ServerController = Ember.ObjectController.extend 

// correct 
Warthog.ServerController = Ember.ObjectController.extend() 
+0

Отличный ответ; Спасибо! – Anconia