2012-04-10 73 views
8

使用扩展定制骨干查看

Backbone.View.extend 

我创建了一个骨干视图称为MyView的。在我看来,我创建了一堆自定义函数。我遇到的问题是我需要创建一个新的Backbone视图,扩展了MyView

我不想创建一个新的视图和重复的代码...我只是想利用继承来扩展功能......问题是我不知道如何做到这一点,我也是不知道如何在Backbone中调用super函数。

*编辑 - 感谢下面的一些答案,但仍不太清楚如何调用父母的方法。例如:

// in subView 
{ 
initialize: function(){ 
// would like to do something like super.initialize() 
// here i would then declare variables exclusive to subview 
} 

回答

14

我想你要找的是什么:

var NewView = MyView.extend({ 
    //Usual config goes on in here, and it will have inherited functions 
    //And default properties from MyView 
}); 

或者,如果你正在寻找调用超类再有就是在这里它的实现: http://forrst.com/posts/Backbone_js_super_function-4co

+0

我明白了,可是我怎么会调用父类的方法? – K2xL 2012-04-10 18:38:09

+0

我不确定我是否关注你...说MyView有方法doSomething(),那么当你通过扩展MyView创建NewView时,你应该可以调用NewView.doSomething(); – 2012-04-10 18:40:11

+0

看我上面编辑 – K2xL 2012-04-10 18:40:55

0
var newView = MyView.extend() 

+0

完美,但我将如何调用覆盖函数内的父方法/函数? – K2xL 2012-04-10 18:38:53

0

我不知道这是多么有用的,但是如果你进入这个编译CoffeeScript的:

class BaseView extends Backbone.View 

class MyView extends Baseview 

它会产生这样的:

(function() { 
    var BaseView, MyView, 
    __hasProp = Object.prototype.hasOwnProperty, 
    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor; child.__super__ = parent.prototype; return child; }; 

    BaseView = (function(_super) { 

    __extends(BaseView, _super); 

    function BaseView() { 
     BaseView.__super__.constructor.apply(this, arguments); 
    } 

    return BaseView; 

    })(Backbone.View); 

    MyView = (function(_super) { 

    __extends(MyView, _super); 

    function MyView() { 
     MyView.__super__.constructor.apply(this, arguments); 
    } 

    return MyView; 

    })(Baseview); 

}).call(this); 
+12

上帝,让我的眼睛流血 – tkone 2012-04-10 17:59:35

+0

@tkone当然,但看看coffeescript :) – asawyer 2012-04-10 18:55:25

+3

多数民众赞成在我指的是! :) – tkone 2012-04-10 18:58:50

7
var SubView = MainView.extend({ 

    initialize: function(options) { 
     this.constructor.__super__.initialize.apply(this); 
    } 

});