Много-много событий отношений с backbone.js - PullRequest
0 голосов
/ 23 января 2012

У меня есть отношение многие ко многим с двумя моими моделями backbone.js, реализованными с использованием сводной таблицы на стороне сервера.Я пытаюсь понять, как структурировать это на стороне клиента.Моя текущая структура:
1) У меня есть модель Tag и TagView, который отображает флажок и метку тега, у меня есть событие флажка, которое в данный момент ничего не делает.

  • У меня есть TagsCollection, которая содержит кучу тегов.
  • У меня есть TagsCollectionView, который связывает add, reset и т. Д. TagsCollection и добавляет TagViews для добавленных тегов, отображает их и добавляет HTMLк его текущему html (при сбросе html сбрасывается).
  • У меня есть глобальный экземпляр TagCollection, который содержит все возможные теги
  • У меня есть модель Notes, которая содержит (пустой) TagCollectionвызвал selectedtags при инициализации.
  • Сервер возвращает массив выбранных тэгов для каждой заметки, который я добавляю в его TagCollection.
  • Теперь перейдем к сложной части, связав все это вместе ... мой NotesViewимеет свой собственный TagsCollectionView, который связан с глобальным TagsCollection (так что он может перечислить все теги) .. теперь, как я могу получить проверенное событие на чекdbox его sub TagViews, чтобы вызвать добавление к этой выбранным тегам модели Notes?Должен ли я предоставить ссылку на этот экземпляр модели Notes на TagsCollectionView в init, который затем предоставляет его всем создаваемым им TagView, чье проверенное событие затем добавляет / удаляет элементы из этой модели?Это лучший способ, которым я могу понять, как это сделать, любые другие мысли будут оценены.

1 Ответ

0 голосов
/ 23 января 2012

Вид предназначен только для визуального отображения модели.Пожалуйста, укажите необходимость для TagsCollectionView более подробно:

  1. Используйте событие изменения для проверки флажка.
  2. Я бы посоветовал инкрементное кодирование.Сначала поработайте с Tag и TagView. Как это работает, продолжайте добавлять коллекцию для хранения тегов.После этого вы можете добавить заметки.Это «разделяй и властвуй»:)
  3. Не путайте со всем дизайном, это очень просто, когда вы начинаете.

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

var TagsCollectionView=Backbone.View.extend({
 el:$(), 
});

var Tag=Backbone.Model.extend({
  defaults:{
   // define the default properties
  }
});

var TagView=Backbone.View.extend({
  el:$("body"),
  events:{
   'change #checkBox':'customFunction'
  },
  initialize: function(){
   _.bindAll(this, 'render','customFunction');
   this.render();   
  },  
  render:function(){
   var tag=new Tag();
   // code to render the checkbox and label
  },
  customFunction:function(){
   // whatever you want to do after checking event of checkbox
  }
});

// collection to collect all the tags
var TagCollection=Backbone.Collection.extend({
  model:Tag
});

var Notes=Backbone.Model.extend({
  defaults:{
   'tagCollection':TagCollection
  }
});

// you do not require TagsCollectionView
...