Реализация структуры иерархии представления Backbone.js - PullRequest
0 голосов
/ 15 ноября 2011

Я хотел бы иметь представление, расширенное до нескольких других представлений в зависимости от типа модели.

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 Ответ

1 голос
/ 16 ноября 2011

Я не могу вспомнить случай, когда я действительно вижу эту модель.Я бы сказал, что гораздо чаще можно увидеть, что какой-то фабричный класс отвечает за взятие объекта и решение, какой другой класс создать для этого объекта.Но я не думаю, что это будет родительский класс, который сделал бы это.Обычно это был какой-то другой объект, который просто отвечал за эту операцию отображения.

Так что, хотя может существовать иерархия:

AnimalView
     |
     +-- DogView
     |
     +-- CatView

, другой объект будет генерировать соответствующий объект (очевидно, плохойпсевдо описание):

AnimalFactory
     AnimalView getViewForAnimal(animal)

Backbone определенно позволит вам создать DogView и CatView, которые оба унаследовали поведение от AnimalView.Возможно, они разделяют общий el, который они оба отображают, общие события, которые отображаются, и они просто используют разные шаблоны или что-то в этом роде.Я просто не ожидал бы, что родительский класс будет тем, кто будет создавать экземпляры подклассов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...