Как определить модели и коллекции BackboneJS, которые содержат дополнительный параграф в URL?

У меня есть модель (и соответствующая коллекция), у которой есть URL с дополнительным параметром. Например, URL-адрес для сообщений collection будет выглядеть примерно так:

/rest-api/posts/2/comments/

и для конкретного комментария URL-адрес будет выглядеть примерно так:

/rest-api/posts/2/comments/3/

Каков наилучший шаблон для определения и создания экземпляров коллекции комментариев и моделей?

Я сейчас делаю это:

var Comment = Backbone.Model.extend({
    url: function() {
        var base = '/rest-api/posts/' + this.get('post_id') + '/comments/';
        if (this.isNew()) { return base; }
        return base + this.id + '/';
    },
   //...
});

var CommentsCollection = Backbone.Collection.extend({
    model: Comment,
    url: function() {
        return '/rest-api/posts/' + this.post_id + '/comments/';
    },
    initialize: function (options) {
         this.post_id = options.post_id;
    },
   //...
});

И создайте экземпляр коллекции следующим образом:

CommentsList = new CommentsCollection({ post_id: current_post_id });

Это шаблон принят для этого в Backbone.js? Я представляю себя в этой новой структуре, я просто хочу, чтобы это было легко и удобно.

1
nl ja de
Это абсолютно нормально, использование атрибутов коллекции иногда решает проблемы
добавлено автор Deeptechtons, источник
Это абсолютно нормально, использование атрибутов коллекции иногда решает проблемы
добавлено автор Deeptechtons, источник

2 ответы

You should not need to define url in the Model since Backbone will append the id automatically to the Collection url: http://backbonejs.org/#Model-url

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

В качестве альтернативы, но добавляя сложность, вы можете добавить коллекцию комментариев как свойство модели Post и инициализировать или извлечь ее, когда это необходимо. Таким образом, если вы предпочитаете, добавьте в коллекцию свойство parent и обратитесь к нему для получения базового url и добавьте часть /comments (чтобы избежать изменять вещи в двух местах, если изменяется URL-адрес почтового ящика).

Выбор, в конце концов, зависит от уровня сложности, который вы готовы обработать.

0
добавлено
Спасибо за подсказку по URL-адресу модели, который догадывается с использованием URL-адреса его коллекции. Однако в этом случае я должен определить метод url для модели в любом случае. Сгенерированный URL-адрес для модели приводит к чему-то вроде /rest-api/posts/2/comments/3 , но серверу нужен конечный /. В любом случае, спасибо! Об определенном экземпляре коллекции комментариев как атрибуте модели post, я обязательно использую этот шаблон, для меня большой смысл.
добавлено автор Armando Pérez Marqués, источник

You should not need to define url in the Model since Backbone will append the id automatically to the Collection url: http://backbonejs.org/#Model-url

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

В качестве альтернативы, но добавляя сложность, вы можете добавить коллекцию комментариев как свойство модели Post и инициализировать или извлечь ее, когда это необходимо. Таким образом, если вы предпочитаете, добавьте в коллекцию свойство parent и обратитесь к нему для получения базового url и добавьте часть /comments (чтобы избежать изменять вещи в двух местах, если изменяется URL-адрес почтового ящика).

Выбор, в конце концов, зависит от уровня сложности, который вы готовы обработать.

0
добавлено
Спасибо за подсказку по URL-адресу модели, который догадывается с использованием URL-адреса его коллекции. Однако в этом случае я должен определить метод url для модели в любом случае. Сгенерированный URL-адрес для модели приводит к чему-то вроде /rest-api/posts/2/comments/3 , но серверу нужен конечный /. В любом случае, спасибо! Об определенном экземпляре коллекции комментариев как атрибуте модели post, я обязательно использую этот шаблон, для меня большой смысл.
добавлено автор Armando Pérez Marqués, источник