首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BackboneJS传递参数

BackboneJS传递参数
EN

Stack Overflow用户
提问于 2014-05-01 09:46:20
回答 1查看 32关注 0票数 0

我有一个主干网应用程序,通过RESTful API从MySQL DB获取数据。现在我想获取与特定artist_id相关的特定视频,但是不管我最终选择了什么艺术家,它都会显示所有的视频,并且在我的控制台中显示../api/videos/artist_videos/undefined --因此,不知怎么的,artist_id没有被传递。

所以我的artistVideo.js看起来是:

代码语言:javascript
复制
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,其中包括上面的文件:

代码语言:javascript
复制
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;
});

最后,我有一个控制器,如下所示:

代码语言:javascript
复制
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

提前谢了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-01 12:37:04

好的,我自己修!

问题是urlRoot --显然它试图马上定义this.artist_id,但它当时并不存在。因此,将其改为:

代码语言:javascript
复制
url: function() {
    return '../index.php/api/videos/artist_videos/' + this.artist_id;
},

解决了问题!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23405368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档