Backbone Могут ли модель и коллекция иметь отдельные URL-адреса?

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

В настоящее время у меня есть отдельные URL-адреса для каждого, но он падает из-за ошибки jQuery Uncaught TypeError: Cannot read property 'length' of undefined

Должен ли я делать это по-другому? Код ниже:

ArticleModel.js

define([
  'underscore',
  'backbone',
], function(_, Backbone) {

  var ArticleModel = Backbone.Model.extend({
        defaults: {},

        url : function() {
            return baseAPIUrl + '/CoreService/GetArticle';
        },

        parse : function(data) {
            console.log(data);

            var articleArray = [];

            $.each(data.Articles, function(i, item) {   
                if (isNotEmpty(item.ScaledImages)) {
                    var Image = item.ScaledImages.ImageUrls[4].Value;
                }

                articleArray = {
                    Id : item.Id,
                    Title : item.Title,
                    FeedTitle : item.FeedTitle,
                    Summary : item.Summary,
                    ImageUrl : Image,
                    Link: item.Link
                };
            });
            return articleArray;
        }
  });

  return ArticleModel;

});

ArticlesCollection.js

define([
  'underscore',
  'backbone',
  'models/article/ArticleModel'
], function(_, Backbone, ArticleModel){

  var ArticlesCollection = Backbone.Collection.extend({

      model: ArticleModel,

      initialize : function(articles, options) {

      },

      url : function() {
        return baseAPIUrl + '/CoreService/GetFollowedMembersArticles';
      },

      parse : function(data) {         
        var articleArray = [];

        $.each(data.Articles, function(i, item) {           
            if (item.ScaledImages != null) {
                var image = item.ScaledImages.ImageUrls[4].Value;
            }

            articleArray.push({
                Id : item.Id,
                Title : item.Title,
                FeedTitle : item.FeedTitle,
                Summary : item.Summary,
                ImageUrl : image,
                Link: item.Link
            });
        });

        return articleArray;
      }     

  });

  return ArticlesCollection;

});

person Adam Storr    schedule 05.12.2012    source источник


Ответы (2)


Да, для вашей модели вы должны использовать:

var Model = Backbone.Model.extend({
   idAttribute: "Id",
   urlRoot: function() {
      return baseAPIUrl + '/CoreService/GetArticle';
   }
});

Затем вы должны создать экземпляр своей модели следующим образом:

var model = new Model({Id: 2});
model.fetch();

Ваш API вызовет следующий URL, а затем host/CoreService/GetArticle/2.

person TYRONEMICHAEL    schedule 05.12.2012

Да. У вас могут быть разные URL-адреса для моделей и коллекций. Единственное, о чем следует беспокоиться, это «url» и «urlRoot».

Для модели это будет:

var User = Backbone.Model.extend({
   urlRoot:'/saveuser.php'
});

Для коллекции это будет:

var Users = Backbone.Collection.extend({
   url:'/saveuser.php'
});

Ваше здоровье

person Roy M J    schedule 08.07.2013