2011-11-15 155 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,映射的常见事件,并且他们只是使用不同的模板或其他东西。我只是不希望父类是做子类实例化的人。