2014-01-23 4 views
2

Базовая модель моего приложения имеет атрибут status. Предположим, что для простоты этот статус может быть либо в ожидании, либо удален.Backbone - используйте разные виды или шаблоны для той же коллекции

У меня есть верхнее меню с этими двумя значениями состояния, когда вы нажимаете один из них, вы видите все объекты с этим статусом (я использую маршрутизатор для запуска фильтра).

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

  • удален объект имеет удалить навсегда и восстановить кнопки
  • в ожидании объект имеет удалить, редактировать и некоторые другие кнопки (также некоторые текстовое поле ...)

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

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

Идеи ?? Благодаря!

ответ

2

Если вы хотите, чтобы создать другой вид для каждого состояния, вы делаете это так:

Router { 

    clickDeletedMenu : { 

     var collection = new MyCollection(); 
     var deletedView = new DeletedView({ model : collection }); 

     collection.fetch({ status : 'deleted' }); // filter deleted objects 
    }, 

    clickPendingMenu : { 

     var collection = new MyCollection(); 
     var pendingView = new PendingView({ model : collection }); 

     collection.fetch({ status : 'pending' }); // filter deleted objects 
    }, 

} 

Если вы хотите создать дифферент шаблоны, вы делаете это так:

View { 

    render : { 

     if (this.model.status == 'deleted') { 
      // render deleted template 
     } else { 
      // render pending template 
     } 
    } 
} 

Наконец, с моей точки зрения, вы можете использовать тот же шаблон и представление и скрывать то, что не нужно внутри шаблона, а не для представления.

пи: код используется только для иллюстрации идеи, он не собирается выполнять :)

+0

Спасибо, здорово! На самом деле я добрался до пыльника. Я создал viewBase, который я распространяю на viewDeleted и viewPending (см. Http://stackoverflow.com/a/9424768/1039488), а затем в коллекции я делаю 'var viewClassName = item.get ('status') +" View "' и используйте 'eval' для создания соответствующего представления. Я делаю это, так как мне легче иметь все в одной коллекции (это мое первое базовое приложение ..) – guyaloni

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