2011-12-23 1 views
2

У меня есть коллекция предметов, все они имеют общие данные (например, идентификатор, название), однако за пределами их общего стека атрибутов они функционально уникальные элементы и имеют отдельные виды и бизнес-логики.Лучший шаблон дизайна для смешанной коллекции в Backbone.js

Моя проблема заключается в отсутствии предварительного опыта в стиле магистралей MVC, я не знаю плюсов и минусов каждого ... или, возможно, если есть гораздо более элегантное решение, которое мне не хватает. Вот пример трех методов, которые я мог бы использовать?

var gizmoCollection = new Backbone.Collection(); // or extend 
var gizmoModel = Backbone.Model.extend({ ... }); 

var morgView = Backbone.View.extend({ ... }); 
var blarView = Backbone.View.extend({ ... }); 


// 1.) Create an attribute for the view in the model? 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo1': view: morgView })); 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo2': view: blarView })); 


// 2.) Or create a seperate model for each type of model? 
var morgModel = morgModel.extend({}); 
var blarModel = blarModel.extend({}); 

gizmoCollection.add(new morgModel({ title: 'Gizmo1' }); 
gizmoCollection.add(new blarModel({ title: 'Gizmo2' }); 


// 3. Or register 'types' of views? 
gizmoView.subClassView('morg', morgView); 
gizmoView.subClassView('blar', blarView); 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo1', type: 'morg' }); 
gizmoCollection.add(new gizmoModel({ title: 'Gizmo2', type: 'blar' }); 

ответ

1

Моим выбором было бы создание отдельных моделей, и при необходимости оно будет выглядеть. Причина в том, что каждая модель должна вести бизнес-логику для себя. Теперь вам может быть проще сделать это просто с subviews, если существует только презентационная логика, которая отличается для каждого типа модели или значения атрибута модели.

Вы должны иметь в виду следующее:

  1. Презентационная логика переходит к Presenter (ы) (Backbone.View)
  2. бизнес логики идёшь модели (s) (Backbone.Model)
  3. навигации логики либо маршрутизатора (aka controller), либо вы можете сделать свою шину событий от Backbone.Events или jQuery.callbacks(), которая будет выполнять эту работу и, возможно, некоторые другие вещи, которые вы хотите отделить от ваших презентаторов и моделей.

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

 Смежные вопросы

  • Нет связанных вопросов^_^