我从 Backbone 开始,最近偶然发现了一个问题。我正在处理的示例应用程序是某种播放列表。我有一个模型“歌曲”和一个集合“播放列表”,其中包含几首歌曲。
播放列表集合的数据应该在多个视图中可用。所以我的想法是拥有全局应用程序变量,其中一个变量可能是播放列表集合。
这样,我可以通过应用程序的初始化来获取歌曲,并在应用程序的每个视图中访问数据。
以下是我目前正在做的事情
define(
[
'jQuery',
'Underscore',
'Backbone',
'collections/songlist'
],
function ($, _, Backbone, SonglistCollection)
{
var PlaylistView = Backbone.View.extend({
// properties
el: '#playlist',
collection: new SonglistCollection(),
/**
* Initialize
*/
initialize: function()
{
// load songs
this.collection.on( 'reset' , this.render, this );
this.collection.fetch();
},
/**
* Render
*/
render: function()
{
// loop through the collection and update the view
},
...
);
}
);
这是我的收藏
define(
[
'Underscore',
'Backbone',
'models/song'
],
function (_, Backbone, songModel)
{
var songList = Backbone.Collection.extend({
model: songModel,
url: 'song'
});
return songList;
}
);
如您所见,我必须创建一个新的集合实例,并为每个要使用播放列表集合数据的视图重新获取数据。
因为我使用的是require.js,所以我对如何创建全局变量有点迷茫。我喜欢这样做的方式是例如。制作 MyApp.collections.Playlist,但我不知道如何使用 AMD(require.js)实现这一点。
我已经找到了一些资源,但我仍然迷路/困惑/ ...
- 在不同的 AMD 模块之间共享资源
- http://www.alexrothenberg.com/2011/02/11/backbone.js-makes-building-javascript-applications-fun.html
提前非常感谢!