Цепочка URL моделей Backbone / Marionette

У меня есть серверная часть node.js, использующая экспресс-ресурс для управления моими моделями мангуста.

У меня есть интерфейс MarionetteJS.

В моем примере два объекта - это организация и проект.

Мой сервер связывает ресурс с uri, например example.com/api/v1/organization/12/project

Идентификаторы уникальны, так как я обслуживаю их из mongodb. это сработает, если я сделаю только ../project/2

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

Теперь у меня есть модели Backbone на стороне клиента. Я определяю базовый URL-адрес, например api/v1/organization, это работает нормально, но как я могу получить проекты для организации? Должен ли я создавать новую модель с базовым URL-адресом, например api/v1/organization/:orgId/project?

Как мне это сделать?

Я надеюсь, вы понимаете, что я хочу сказать, любая помощь приветствуется!


person pfried    schedule 16.02.2013    source источник


Ответы (1)


Вы можете сделать что-то вроде этого:

var ProjectModel = Backbone.Model.extend({
   initialize: function(attrs, options) {
       if( options && options.organizationId){
          this.urlRoot = 'example.com/api/v1/organizations/' + options.organizationId + '/projects';
       }
   }
});

var ProjectCollection = Backbone.Collection.extend({
   initialize: function(models, options) {
       this.url = 'example.com/api/v1/organizations/' + options.organizationId + '/projects';
   },
});

// fetch one single project, not in a collection
var model = new ProjectModel({id: 4}, {organizationId: 7});
model.fetch();

// fetch all projects
var collection = new ProjectCollection(null, {organizationId: 7});
collection.fetch();

Когда модель находится в коллекции, urlRoot ей не требуется, так как Backbone будет использовать url коллекции модели в качестве основы.

person Paul Hoenecke    schedule 16.02.2013
comment
я думаю, что я могу создать коллекцию таким же образом, но как мне их соединить, потому что, если у меня есть коллекция со связанной моделью, эта модель не подойдет, или я ошибаюсь? - person pfried; 16.02.2013
comment
было бы неплохо для некоторых просмотров - person pfried; 16.02.2013