Backbone -lational.js + Backbone.View (s) - PullRequest
       22

Backbone -lational.js + Backbone.View (s)

5 голосов
/ 22 июня 2011

Вопрос: Документация недостаточна, и я являюсь чем-то вроде новичка - может ли кто-нибудь подтвердить правильный (предполагая, что он есть) способ привязки Backbone.Views к экземплярам Backbone.RelationalModel (из backbone -lational.js) для обновления / рендеринга в дом? Я попробовал несколько разных подходов, основанных на обычной привязке Модель / Представление в Backbone, но без особого успеха.

Предыстория (/ более подробная информация): Я изучаю веревки с помощью Backbone.js, и мне пришлось многое поднять за последнюю неделю. Если я упускаю что-то очевидное (что весьма вероятно, включая «правильный» способ решения моей проблемы ниже), пожалуйста, позвоните мне.

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

Я видел два варианта: магистрально-реляционный и ligament.js .

Я начал с backbone -lational.js, и мне были созданы RelationalModels (замена backbone-реляционного на стандартную модель Backbone) для различных словарей в дереве, которое передается интерфейсом REST. Отношения между ними определены, и консоль, записывающая JSON из каждой модели (в их соответствующих функциях инициализации), показывает, что все они правильно вызываются / загружаются с сервера по команде fetch () на общем уровне сбора.

Итак, все отлично.

Проблема: у меня есть представления, «слушающие» обновления для каждой из этих моделей (и связанные функции, которые должны рендерить шаблоны в DOM), и они никогда не «запускаются» вообще (не говоря уже о рендеринге ...). Основное представление запускается при вызове fetch (), без проблем, загружая модель «верхнего уровня» и отображая ее в dom - но представления, представляющие модели «внешнего ключа» в этой модели «верхнего уровня», никогда не работают (хотя данные ОПРЕДЕЛЕННО загружаются в каждую модель, о чем свидетельствует запись в консоль каждой модели, упомянутой выше).

Любые идеи будут очень, очень признательны.

В прямом ответе Raynos ответ ниже (спасибо Raynos!): Если бы я определил базовый URL для UpperLevelCollection с UpperLevelModels, существующими в (UpperLevelCollection url) / (UpperLevelModel id) на сервере, как бы я отобразил эти LowerLevelCollections на ключи словаря в одном дампе JSON для каждого UpperLevelModel со стороны сервера? Другими словами, может ли использование коллекций в моделях должным образом обрабатывать дамп данных с сервера, как этот (очевидно, очень упрощенный, но решает проблему) И правильно сохранять / обновлять / синхронизировать его обратно?

[{
    "some_key": "Some string",
    "labels": ["A","List","Of","Strings"],
    "content": [{
        "id": "12345"
        "another_key": "Some string", 
        "list": ["A","list","of","strings"],
    },{
        "id": "67890"
        "another_key": "Some string", 
        "list": ["A","list","of","strings"],
    }],
}]

Ответы [ 2 ]

2 голосов
/ 22 июня 2011

Обычно для вложенных словарей я использую следующий подход

var UpperLevelCollection = Backbone.Collection.extend({
    model: UpperLevelModel
  }),
  UpperLevelModel = Backbone.model.extend({
    initialize: function() {
      this.nested = new LowerLevelCollection;
    }
  }),
  LowerLevelCollection = Backbone.Collection.extend({
    model: LowerLevelModel
  }),
  LowerLevelModel = Backbone.Model.extend({});

Просто вложите эти коллекции в модели до конца.

1 голос
/ 10 января 2012

Проблема может заключаться в том, что при загрузке новых данных в ParentModel ваша дочерняя коллекция AFAIK фактически не извлекается, она стирается и заменяется новой коллекцией (см. Backbone.HasMany.OnChange в строке 584 в backbone -lational.js). ). Таким образом, ваши собственные привязки к дочерней коллекции исчезли.

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

...