Когда самое подходящее время для получения коллекции в Backbone js?

Итак, я работаю над магистральным приложением и пытаюсь максимально модульно разделить вещи, используя require.js. Этобыло моим проводником.

У меня возникли проблемы с тем, чтобы мое представление всегда вызывало мою коллекцию. Если я получаю доступ к моему приложению с базового URL-адреса ( myapp.com/) и перехожу к маршруту моего представления, коллекция извлекается. Если я не перейду к представлению, а вместо этого получу доступ к нему с myapp.com/#/campaigns, коллекция не будет извлечена.

Вот соответствующий код.

router.js

    define([
  'jQuery',
  'Underscore',
  'Backbone',
  'views/home/main',
  'views/campaigns/list'
], function($, _, Backbone, mainHomeView, campaignListView ){
  var AppRouter = Backbone.Router.extend({
    routes: {
      // Define some URL routes
      'campaigns': 'showCampaigns',

      // Default
      '*actions': 'defaultAction'
    },
    showCampaigns: function(){
      campaignListView.render();
    },
    defaultAction: function(actions){
      // We have no matching route, lets display the home page 
      //mainHomeView.render(); 
    }
  });

  var initialize = function(){
    var app_router = new AppRouter;
    Backbone.history.start();
  };
  return { 
    initialize: initialize
  };
});

collections/campaigns.js

    define([
  'jQuery',
  'Underscore',
  'Backbone',
  'models/campaigns'
], function($, _, Backbone, campaignsModel){
  var campaignsCollection = Backbone.Collection.extend({
    model: campaignsModel,
    url: '/campaigns',
    initialize: function(){
    }

  });
  return new campaignsCollection;
});

views/campaigns/list.js

define([
  'jQuery',
  'Underscore',
  'Backbone',
  'collections/campaigns'
  ], function($, _, Backbone, campaignsCollection){
      var campaignListView = Backbone.View.extend({
        el:$('#container'),
        initialize:function(){
          this.collection = campaignsCollection;
          this.collection.fetch();
        },
        render: function(){
          var data = {
            campaigns: this.collection,
            _: _
          };
          $('#container').html('Campaigns length: '+data.campaigns.models.length);
        }
      });
      return new campaignListView;
  });

Есть идеи, что я делаю неправильно? Я полагаю, что это как-то связано с вызовом this.collection.fetch()в функции initalizeпредставления. Если это проблема, куда мне поместить fetch()?

5
задан CamelBlues 12 May 2012 в 00:01
поделиться