访问backbone.js中另一个js文件中的javascript变量

时间:2013-10-10 16:38:27

标签: javascript backbone.js

我在应用程序中有一个HomeRoute.js文件,该文件具有BackBone.Model.extend实现。我在这个HomeRoute.js的render方法中调用ajax,它为我提供了会话json。现在从这个json我想提取一个变量sessionId,我想在另一个HeaderView.js文件中使用这个sessionId变量。

我对此进行了很多研究,但找不到任何方法将此变量传递给HeaderView.js

HomeRoute.js代码

var HomeRoute = BackBone.Model.extend({
render: function() { 

 this.createSession("userId","tenantId","orgId","accountNumb"); 
},

createSession : function(userId, tenantId, orgUnit, userAccountNum) {
var self = this;
var showHtml = function(data){
           if(data.status == "valid"){
           var sessionId = data.session.sessionId;// This variable to be used in another js file
           self.displayHtml(self, sessionId);   
           }else{
                //  To be implemented Later
           }
    }
    $.ajax({
         type : 'post',
         url : "url",
         success : showHtml,
         error : function(){
        alert("An Error Occurred while creating session");
         }
    });
},

任何领导对我都非常有帮助。

2 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。

我只是在HomeRoute(在同一个文件中)之外创建一个名为sessionId的变量(现在你只在showHtml函数中有该变量,在HomeRoute对象中;在范围内将它移动得更高)。在此顶级范围内的任何变量都可以在此之后包含的其他.js文件中看到,包括您的HeaderView.js文件。

例如:

var sessionId;

var HomeRoute = BackBone.Model.extend({
render: function() { 

 this.createSession("userId","tenantId","orgId","accountNumb"); 
},

createSession : function(userId, tenantId, orgUnit, userAccountNum) {
var self = this;
var showHtml = function(data){
           if(data.status == "valid"){
           sessionId = data.session.sessionId;// This variable to be used in another js file
           self.displayHtml(self, sessionId);   
           }else{
                //  To be implemented Later
           }
    }
    $.ajax({
         type : 'post',
         url : "url",
         success : showHtml,
         error : function(){
        alert("An Error Occurred while creating session");
         }
    });
},

然后在另一个文件(HeaderView.js,包含-after- HomeRoute.js)中,您只需访问该变量:

alert(sessionId);

...假设post函数已经返回,当然。 (并且假设您可以在JS中更改对象范围之外的变量,我并不乐观。如果没有,您将不得不从实例化的HomeRoute对象返回值并且将它分配给sessionId。)

答案 1 :(得分:0)

如果sessionId是HomeRoute的关键部分,您可以将其作为模型的一部分并在初始化程序下初始化:

var HomeRoute = BackBone.Model.extend({
    initialize: function() { 
        this.sessionId = null;
    },
...
}

并在'showHtml'下更新:

var showHtml = function(data){
           if(data.status == "valid"){
           self.sessionId = data.session.sessionId;// This variable to be used in another js file
           self.displayHtml(self, sessionId);   
           }else{
                //  To be implemented Later
           }
    }

您需要在视图文件中导出模型对象才能访问sessionId

var _homeRoute = new HomeRoute ();
var _sid = _homeRoute.sessionId;