Requirejs не передает идентификатор модели магистрали

0

Поскольку я переключился на require.js для моего приложения с использованием магистрали, похоже, что моя модель больше не получает или не добавляет мой идентификатор к URL-адресу, как он использует.

  var campaign = new CampaginModel({id: options.id});

когда я утешаю модель url is /api/campaign/ when before it /api/campaign/1/

Что я делаю неправильно?

Посмотреть:

define([
  'jquery',
  'underscore',
  'backbone',
  'views/RewardView',
  'views/FriendRewardView',
  'models/CampaginModel',
  'text!templates/backbone/portal/campaignTemplate.html'
], function($, _, Backbone, rewardView, friendRewardView, CampaginModel, campaignTemplate){



   var CampaginView = Backbone.View.extend({
       el: '#campaign-panel',

        // View constructor
        initialize: function() {
            // Storing the View context
            self = this;
        },


        render: function(options) {
            if(options.id){


                var campaign = new CampaginModel({id: options.id});

                console.log('model', campaign)

                campaign.fetch({
                    success: function(campaign){
                        // We can only get the reward when the campaign reward url is returned.

                        var rewardview = new RewardView();
                        rewardview.render({reward_url: campaign.get('participant_reward')});


                        var friendview = new FriendRewardView();
                        friendview.render({reward_url: campaign.get('friend_reward')});


                        var template = _.template(campaignTemplate, {campaign: campaign});
                        this.$el.html(template);


                    }// end success

                    ,

                    error: function (model, response) {
                      console.log('error', model, response);
                    }// end of error

                }); // end fetch
            }// end if option.id
        } // end render function
    }); // end campagin view


  return CampaginView;

});

Модель:

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

    var CampaginModel = Backbone.Model.extend({
       urlRoot: '/api/v1/campaign/'
    });

  return CampaginModel;

});
Теги:
requirejs
backbone.js

1 ответ

1
Лучший ответ

Это не проблема require.js. Вы определяете urlRoot и, следовательно, "перезаписываете" URL по умолчанию в форме "[collection.url]/[id]", поэтому вам нужно добавить идентификатор idAttribute к вашему определению:

var CampaginModel = Backbone.Model.extend({
   urlRoot: '/api/v1/campaign/',
   idAtttribute: 'id'
});

Приветствия.

  • 0
    Вау, так полезно на этот и мои последние несколько вопросов, еще раз большое спасибо. Если я определил коллекции, будет ли это работать без idAtttribute?
  • 1
    Да, следует, если модель является частью коллекции, ее URL будет "[collection.url] / [id]", если вы не определяете urlRoot.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню