我有一个主干网应用程序,通过RESTful API从MySQL DB获取数据。现在我想获取与特定artist_id相关的特定视频,但是不管我最终选择了什么艺术家,它都会显示所有的视频,并且在我的控制台中显示../api/videos/artist_videos/undefined --因此,不知怎么的,artist_id没有被传递。
所以我的artistVideo.js看起来是:
function (App, Backbone) {
var ArtistVideos = App.module();
ArtistVideos.View = Backbone.View.extend({
className: 'artistVideos',
template: 'single_video',
initialize: function() {
this.listenTo(this.model, 'sync', this.render);
},
serialize: function() {
return this.model.toJSON();
},
beforeRender: function(){
$('ul.acmenu li a.selected').removeClass('selected');
$('ul.acmenu li a.artistVideos').addClass('selected');
}
});
ArtistVideos.ArtistVideosModel = Backbone.Model.extend({
urlRoot: '../index.php/api/videos/artist_videos/' + this.artist_id,
defaults: {
"not categorized": [],
"live": [],
"others": []
}
});
return ArtistVideos;
}然后是我的mainView,artistVideoPage.js,其中包括上面的文件:
define([
'app',
'backbone',
'modules/artistImage',
'modules/artistName',
'modules/artistVideos',
],
function (App, Backbone, Artistimg, Artistname, ArtistVideos ) {
var ArtistVideo = App.module();
ArtistVideo.View = Backbone.View.extend({
className: 'artist',
template: 'artistVideoPage',
beforeRender: function() {
var artistimgCollection = new Artistimg.ArtistimgCollection();
artistimgCollection.artist_id = this.artist_id;
this.insertView('.artistImage', new Artistimg.View({collection: artistimgCollection}));
artistimgCollection.fetch();
var artistnameCollection = new Artistname.ArtistnameCollection();
artistnameCollection.artist_id = this.artist_id;
this.insertView('.artistName', new Artistname.View({collection: artistnameCollection}));
artistnameCollection.fetch();
var artistvideosModel = new ArtistVideos.ArtistVideosModel();
artistvideosModel.artist_id = this.artist_id;
this.insertView('.artistVideosDiv', new ArtistVideos.View({model: artistvideosModel}));
artistvideosModel.fetch();
}
});
return ArtistVideo;
});最后,我有一个控制器,如下所示:
ArtistController.prototype.initVideos = function(id) {
this.artistVideosView.artist_id = id;
this.artistNavigation.artist_id = id;
App.useLayout('artistVideoPage', 'artistVideoPage').setViews({
'.videosDiv': this.artistVideosView,
'.artistTopMenu': this.artistNavigation
}).render();
};我试着做console.log(this.artist_id) -它实际上显示了正确的ID,但我仍然得到了../api/videos/artist_videos/undefined
有人知道这里有什么问题吗?我为什么要得到undefined
提前谢了?
发布于 2014-05-01 12:37:04
好的,我自己修!
问题是urlRoot --显然它试图马上定义this.artist_id,但它当时并不存在。因此,将其改为:
url: function() {
return '../index.php/api/videos/artist_videos/' + this.artist_id;
},解决了问题!
https://stackoverflow.com/questions/23405368
复制相似问题