2011-11-15 152 views
0

我希望根據模型的類型將視圖擴展到其他幾個視圖。實現Backbone.js視圖層次結構

var AnimalView = Backbone.View.extend({.....}); 
var DogView = AnimalView.extend({......}); 
var CatView = AnimalView.extend({.....}); 

但我真的很想做的是有AnimalView確定哪些物種結果:

var AnimalView = Backbone.View.extend({ 
initialize : function(){ 
    if (this.model.get("species")=="dog"){this = new DogView({model:this.model});} 
    if (this.model.get("species")=="cat"){this = new CatView({model:this.model});} 
}) 
}); 

我知道這不工作,但它是我想有這個想法。

我可以這樣做:

if (pet.get("species")=="dog"){petVeiw = new DogView({model:pet})} 
else if (pet.get("species")=="cat"){petVeiw = new CatView({model:pet})} 

但我想給邏輯隔離在父視圖,即AnimalView。

有關完成此操作的最佳方法的任何想法?

回答

1

我不能想到一個情況,我真的看到這種模式。我會說,看到某種工廠類負責採取一個對象並決定創建哪個其他類來與該對象一起工作會更常見。但我認爲這不會是一個父母班會這樣做。它通常是一些其他的對象,只是負責該映射操作。

因此,儘管可能存在的層次結構:

AnimalView 
    | 
    +-- DogView 
    | 
    +-- CatView 

另一個對象將產生一個合適的(顯然不好僞說明):

AnimalFactory 
    AnimalView getViewForAnimal(animal) 

骨幹肯定會允許你創建一個DogView和CatView,它們都從AnimalView繼承了行爲。也許分享他們都映射到的共同el,映射的常見事件,並且他們只是使用不同的模板或其他東西。我只是不希望父類是做子類實例化的人。