Поскольку я переключился на 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;
});
Это не проблема require.js. Вы определяете urlRoot и, следовательно, "перезаписываете" URL по умолчанию в форме "[collection.url]/[id]", поэтому вам нужно добавить идентификатор idAttribute к вашему определению:
var CampaginModel = Backbone.Model.extend({
urlRoot: '/api/v1/campaign/',
idAtttribute: 'id'
});
Приветствия.