ユーザーが にアクセスしたときに、http://example.com/#/playlist
いくつかの曲をリストしたいと考えています。
http://example.com
最初にアクセスしてリンクをクリックすると機能します(すべての曲がリストされます)<a href="#/playlist">Playlist</a>
。
ただし、直接 に移動するとhttp://example.com/#/playlist
、何も表示されません。
this.collection プロパティをログに記録すると、コレクションは常に同じです (リンクを使用するか、直接アクセスする場合)。
唯一の違いは、this.collection.each( function ( song ) {} );
以下の render 関数では、URL に直接アクセスするときにループしないことです。
これはコードです:
define(
[
'jQuery',
'Underscore',
'Backbone',
'collections/songlist',
'views/song'
],
function ($, _, Backbone, SonglistCollection, SongView)
{
var PlaylistView = Backbone.View.extend({
// properties
el: '#content',
tagName: 'ul',
collection: new SonglistCollection(),
/**
* Initialize
*/
initialize: function()
{
// load songs
this.collection.bind( 'reset', this.render(), this );
this.collection.fetch();
},
/**
* Render
*/
render: function ()
{
this.$el.html('');
console.log(this.collection);
this.collection.each( function ( song )
{
var songItem = new SongView( { model: song } );
this.$el.append( songItem.el );
}, this);
}
});
return new PlaylistView;
}
);
問題は、「each-loop」で発生します。
render: function ()
{
this.$el.html('');
console.log(this.collection);
this.collection.each( function ( song )
{
var songItem = new SongView( { model: song } );
this.$el.append( songItem.el );
}, this);
}
アップデート
これは私のルーティングコードです:
define([
'jQuery',
'Underscore',
'Backbone',
'views/start',
'views/playlist'
],
function ($, _, Backbone, startView, playlistView)
{
var AppRouter = Backbone.Router.extend({
routes: {
'playlist': 'playlist',
// default
'*actions': 'start'
},
start: function ()
{
// call render on the module we loaded via the dependency array
// views/items/list
startView.render();
},
playlist: function ()
{
playlistView.render();
},
defaultAction: function ( actions )
{
// no default action, let's just log what the url was
console.log('No route:', actions)
}
});
var initialize = function ()
{
var app_router = new AppRouter;
Backbone.history.start();
}
return {
initialize: initialize
};
}
);