Coffeescript Backbone расширяется / Класс Наследования - PullRequest
1 голос
/ 15 марта 2012

Я пытаюсь выделить некоторые методы, которые я использую в своих моделях магистрали, и я не понимаю, почему это не работает.

page.js.coffee

#= require ./base_class

class MyApp.Models.Page extends MyApp.Models.BaseClass

  initialize: () ->
    console.log('Page Object initialized')
    @._dirty = false
    @changes = []
    @.name = 'Page'
    @._linked = false

 url: () ->
    '/pages/' + @id

Однако когда я вхожу в консоль

page = new MyApp.Models.Page();    #=> Page Object initialized
page.Link($('#myform'));   #=>  Uncaught TypeError: Object #<Page> has no method 'Link'

, я не понимаю, почему методы не наследуются.* Вот jsfiddle вопроса: http://jsfiddle.net/Y9bPX/11/

Ответы [ 2 ]

4 голосов
/ 16 марта 2012

Ваш отступ отключен.Ваш CoffeeScript выглядит следующим образом:

class MyApp.Models.BaseClass extends Backbone.Model

Linked: () =>
  @._linked
#...

, но должен выглядеть так:

class MyApp.Models.BaseClass extends Backbone.Model

  Linked: () =>
    @._linked
  #...

Отсутствие отступов дает пустую MyApp.Models.BaseClass, а затем кучу недоступных функцийанонимный объект в JavaScript:

// CoffeeScript boilerplate...
MyApp.Models.BaseClass = (function(_super) {
  // Standard CoffeeScript class boilerplate...
})(Backbone.Model);

({
  Linked: function() {
    return _this._linked;
  },
  // etc...
});

Так что исправьте свой отступ в вашем MyApp.Models.BaseClass, и все будет в порядке.Помните, что вся структура блоков CoffeeScript основана на отступе, поэтому, если у вас нет правильного отступа, у вас есть куча глупостей.

0 голосов
/ 15 марта 2012

Если ваш тестовый код такой, как вы его опубликовали (а различия в пространствах имен в классах являются ошибкой вставки) , ошибка в том, что вы не вызываете конструктор на странице, вместо этого высделав ссылку на него:

page = new MyApp.Models.Page;

должно быть

page = new MyApp.Models.Page();

Проверьте это здесь (откройте консоль):

http://jsfiddle.net/Y9bPX/3/

...