Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问backbone.js中另一个js文件中的javascript变量_Javascript_Backbone.js - Fatal编程技术网

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

访问backbone.js中另一个js文件中的javascript变量,javascript,backbone.js,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.Mode

我在应用程序中确实有一个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");
         }
    });
},

任何线索都会对我很有帮助。

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

我只是在HomeRoute之外的同一个名为sessionId的文件中创建了一个变量,现在您在HomeRoute对象中的showHtml函数中只有该变量;将其移动到范围更高的位置。在这个最顶层范围内的任何变量都可以被后面包含的其他.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。

如果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;

谢谢你,冷。您还可以演示如何在HeaderView.js中包含HomeRoute.js。@rkj您不需要这样做。您可以将它们都包含在同一个HTML页面中,即HomeRoute first。