实现Backbone.js视图层次结构

时间:2011-11-15 18:15:02

标签: inheritance 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 个答案:

答案 0 :(得分:1)

我无法想到我真正看到这种模式的情况。我会说更常见的是看到某种工厂类负责获取一个对象并决定创建哪个其他类来使用该对象。但我认为这不会是一个父类。通常情况下,其他一些对象只负责映射操作。

因此,虽然可能存在以下层次结构:

AnimalView
     |
     +-- DogView
     |
     +-- CatView

另一个对象将生成适当的一个(显然是错误的伪描述):

AnimalFactory
     AnimalView getViewForAnimal(animal)

Backbone绝对允许您创建DogView和CatView,它们都继承了AnimalView的行为。也许共享他们都映射到的公共el,映射的公共事件,他们只是使用不同的模板或其他东西。我不希望父类成为实现子类实例化的类。