2013-02-25 51 views
3

我發展與Backbone.js的Backbone.js的訪問

我有2個觀點,我想用在其他視圖中定義的功能的應用另一種觀點認爲功能:

var FormView = Backbone.View.extend({ 
    initialize: function(){ 
    resultsView.myFunction(); 
    } 

}) 


var resultsView = Backbone.View.extend({ 
    myFunction: function(){ 
    alert('test') 
    } 
}) 

我可怎麼辦它?

+0

一般而言,您不想這樣做。你最終會得到意大利麪代碼。如果它是一個普通功能,則將其抽象出來。如果該函數確實與resultView應該關注的某些內容有關,那麼請監聽模型中的更改或觸發resultView偵聽的formView上的事件。 – steveax 2013-02-25 17:35:33

回答

5

你這樣做的方式相反。你可以做一個base view其他意見,可以擴展和實現,如:

/** Any Views that inherit from this View can use the myFunction() */ 
var BaseView = Backbone.View ({ 
    myFunction : function(param) { 
     alert(param); 
    } 
}); 

/** Inherit from the base view above */ 
var ChildView = BaseView.extend({ 
    initialize : function(){ 
     this.myFunction('test'); 
    } 
}); 

var instanceView = new ChildView({}); 
1

當您使用Backbone.View.extend,你正在創建一個class。爲了使用該類,您需要使用new運算符創建一個instance。這是傳統的,以大寫字母和實例變量名用小字母開頭的類名,所以我會使用以下樣本命名約定:

//declare view class 
var ResultsView = Backbone.View.extend({ 
    myFunction: function(){ 
    alert('test') 
    } 
}); 

創建類的實例,並把它傳遞到你的FormView

var resultsView = new ResultsView(); 
var formView = new FormView({ resultsView: resultsView }); 

訪問傳遞的參數在FormView.initialize

var FormView = Backbone.View.extend({ 
    initialize: function(options){ 
    options.resultsView.myFunction(); 
    } 
});