Inheritance Coffeescript主干扩展/类继承
我试图找出我在主干模型中使用的一些方法,但我不明白为什么它不起作用 base_class.js.咖啡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
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中都是可选的。