Inheritance Coffeescript主干扩展/类继承

Inheritance Coffeescript主干扩展/类继承,inheritance,backbone.js,coffeescript,Inheritance,Backbone.js,Coffeescript,我试图找出我在主干模型中使用的一些方法,但我不明白为什么它不起作用 base_class.js.咖啡 class MyApp.Models.BaseClass extends Backbone.Model Linked: () => @._linked Link: (form) => if @._linked == false $(form).backboneLink(@, {'prefixed':true}) @._linked = true els

我试图找出我在主干模型中使用的一些方法,但我不明白为什么它不起作用

base_class.js.咖啡

class MyApp.Models.BaseClass extends Backbone.Model

Linked: () =>
  @._linked

Link: (form) =>
  if @._linked == false
    $(form).backboneLink(@, {'prefixed':true})
    @._linked = true
  else
    $(form).backbonePopulate(@, {'prefixed':true})

Dirty: () ->
  @collection.Dirty()
  @._dirty = true

Clean: () ->
  @._dirty = false

isDirty: () =>
  @._dirty
#= 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.js.coffee

class MyApp.Models.BaseClass extends Backbone.Model

Linked: () =>
  @._linked

Link: (form) =>
  if @._linked == false
    $(form).backboneLink(@, {'prefixed':true})
    @._linked = true
  else
    $(form).backbonePopulate(@, {'prefixed':true})

Dirty: () ->
  @collection.Dirty()
  @._dirty = true

Clean: () ->
  @._dirty = false

isDirty: () =>
  @._dirty
#= 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'
我不明白为什么这些方法没有被继承


这里是一个问题的症结所在:

如果您的测试代码是您发布的,并且类上的命名空间差异是一个粘贴错误,那么错误在于您没有在页面上调用构造函数,而是引用了它:

page = new MyApp.Models.Page;
应该是

page = new MyApp.Models.Page();
在此处查看打开控制台:


如果测试代码与发布代码相同,并且类上的命名空间差异是粘贴错误,则错误在于您没有在页面上调用构造函数,而是引用了它:

page = new MyApp.Models.Page;
应该是

page = new MyApp.Models.Page();
在此处查看打开控制台:


你的缩进消失了。您的咖啡脚本如下所示:

class MyApp.Models.BaseClass extends Backbone.Model

Linked: () =>
  @._linked
#...
class MyApp.Models.BaseClass extends Backbone.Model

  Linked: () =>
    @._linked
  #...
但它应该是这样的:

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的整个块结构都是基于缩进的,因此如果缩进不正确,则会产生一堆废话。

缩进已关闭。您的咖啡脚本如下所示:

class MyApp.Models.BaseClass extends Backbone.Model

Linked: () =>
  @._linked
#...
class MyApp.Models.BaseClass extends Backbone.Model

  Linked: () =>
    @._linked
  #...
但它应该是这样的:

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的整个块结构都是基于缩进的,所以如果缩进不正确,那么你就会胡说八道。

有什么想法吗?我想我要用Backbone来解决一个问题调用new时括号在JavaScript和CoffeeScript中都是可选的。有什么想法吗?我想我要用Backbone来打开一个问题调用new时括号在JavaScript和CoffeeScript中都是可选的。