Аргумент require.js, передаваемый в модели Object [object Object], не имеет метода fetch [duplicate].

0

Я получаю сообщение об ошибке, когда var campaign = new CampaginModel() не получает модель.

Использование require.js + basebone:

Ошибка:

Uncaught TypeError: Object [object Object] не имеет метода 'fetch'

Когда я console.log(CampaginModel) объект console.log(CampaginModel) я получаю function(){return i.apply(this,arguments)} которая абсолютно неверна, так как она должна быть экземпляром модели.

Что я тут сделал?

Модель (модели /CampaginModel):

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

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

  return CampaginModel;

});

Посмотреть:

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


   var CampaginView = Backbone.View.extend({
       el: '#campaign-panel',
        render: function(options) {
            if(options.id){



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

                campaign.fetch({
                    success: function(campaign){

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


  return CampaginView;

});

main.js:

require.config({

  shim: {


    underscore: {
      exports: '_'
    },
    backbone: {
      deps: ['underscore', 'jquery'],
      exports: 'Backbone',
      init: function (_, $) { Backbone.$ = $; return Backbone; }


    }
  },
  paths: {
    jquery: '//cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min',
    underscore: '//cdnjs.cloudflare.com/ajax/libs/underscore.js/1.5.2/underscore-min',
    backbone: '//cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.0/backbone-min',
    templates: '/templates/'
  }

});

require([
  'app'
], function(App){

  App.initialize();

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

1 ответ

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

Ваше определение представления неверно, поскольку вы определяете семь параметров, но передаете только пять функций. Поэтому, когда вы CampaginModel экземпляр CampaginModel вас действительно есть экземпляр представлений views/FriendRewardView. Поэтому измените свое определение следующим образом:

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

});

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

  • 0
    Я не понимаю, зачем мне экземпляр FriendRewardView? Я передаю эту точку зрения, потому что могу назвать ее в CampaginView. не могли бы вы объяснить большое спасибо
  • 0
    Поскольку вы определили семь зависимостей, но передали только пять из них в функцию в качестве аргументов, так как они назначаются по порядку, ваша пятая зависимость - это views/FriendRewardView поэтому она присваивается вашему пятому параметру, который является CampaginModel .
Показать ещё 1 комментарий

Ещё вопросы

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