2012-02-03 4 views
2

Я создаю веб-приложение с использованием backbone.js в качестве структуры MVC. Я борюсь за разработку своих моделей. У меня есть один родительский/основной объект, но он довольно сложный/вложенный в природе, то есть более 50 атрибутов и некоторое вложение. То, что я борюсь с это:backbone.js комплексная модель

У меня есть что-то вроде:

{section1:{ 
     key1:"value1", 
     key1:"value2"}, 
    section2:{ 
     key1:"value1", 
     key1:"value2"} 
    } 

Если я сплющить объект вне как:

{section1_key1:"value1", 
    section1_key2:"value2", 
    section2_key1:"value1", 
    section2_key2:"value2" 
    } 

или мне:

  1. использовать встроенный плагин и передать в большой вложенный объект JSON как есть?
  2. или создать отдельные модели для каждого раздела и как-то разместить в родительской модели .
  3. или просто создать модели для дочерних объектов, а не беспокоиться о вложенности и добавить некоторый тип ссылки

Suggestions оценили.

+1

Также есть это из FAQ: http://documentcloud.github.com/backbone/#FAQ-nested – tkone

ответ

3

Я тоже борюсь за это прямо сейчас.

Я склоняюсь к выбору 2.

У меня есть каждый из вложенных разделов, построенных в отдельные модели, а также создание интерфейса, похожий на SQLObject в Python (или действительно любой ORM)

Так дало простой блог идея:

var Tag = Backbone.Model.extend({ 
    defaults: { 
     name: '' 
    }, 
    validate: function(atts){ 
     if(!atts.name || atts.name.length < 2){ 
      return "You must provide a name that's longer than 2 characters"; 
     } 
    } 
}); 

var TagList = Backbone.Collection.extend({ 
    model: Tag 
}) 

var Entry = Backbone.Model.extend({ 
    defaults: { 
     author: "Todd", 
     pub_date: new Date(), 
     content: "", 
     title: "", 
     tags: new TagList() 
    }, 
    add_tag: function(tag){ 
     var tag_collection = this.get('tags'); 
     tag_collection.add({name: tag}); 
     this.set({tags: tag_collection}); 
    }, 
    remove_tag: function(tag){ 
     tag.destroy(); 
    }, 
    tags: function(){ 
     return this.get('tags').models; 
    } 
}); 

альтернативным идея бы позволить initialize обрабатывать де-вложенности и создание и добавление элементов в коллекцию, которая затем сохраняется как свойство на этой модели.

+0

В моем случае, хотя большинство дочерних объектов/моделей были бы взаимно однозначными отношениями со своим родителем. Причиной для вложенности было бы уменьшить сложность с учетом количества сдвигов атрибутов (50+). – whyvez

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