Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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
如何在运行时获取javascript文件路径_Javascript_Backbone.js_Callback_Callstack - Fatal编程技术网

如何在运行时获取javascript文件路径

如何在运行时获取javascript文件路径,javascript,backbone.js,callback,callstack,Javascript,Backbone.js,Callback,Callstack,要求: 我想找到用于开发现有页面的所有主干视图(src文件路径)。在我们的例子中,每个后视图都将保存在一个单独的js文件中。简而言之,我想找到js文件路径(扩展主干视图的视图) 我所尝试的: 在我们的案例中,我们有一个包装器视图,它扩展了主干视图,进一步说,所有视图都将扩展包装器视图。因此,在包装器视图的initialize方法中,我生成了获取调用堆栈的错误,并且进一步我能够找到js文件路径 var WrapperView = Backbone.View.extend({ ini

要求: 我想找到用于开发现有页面的所有主干视图(src文件路径)。在我们的例子中,每个后视图都将保存在一个单独的js文件中。简而言之,我想找到js文件路径(扩展主干视图的视图)

我所尝试的: 在我们的案例中,我们有一个包装器视图,它扩展了主干视图,进一步说,所有视图都将扩展包装器视图。因此,在包装器视图的initialize方法中,我生成了获取调用堆栈的错误,并且进一步我能够找到js文件路径

var WrapperView = Backbone.View.extend({        
initialize: function() {
    this.track();
},
track : function() {
    try{
        throw new Error("STACK");
    }
    catch(e){
        this.$el.attr('view-url', e.stack.match(/\bhttps?:\/\/.*js*(?=(?:(?!http)[\s\S])*https?:\/\/\S*backbone-min\.js)/)[0]);
    }

    if(Object.observe){
        Object.observe(this, function(changes){
            var eleProp = _.filter(changes, function(prop){ return prop.name == "$el"; })[0];
            if(!eleProp) return;
            eleProp.object.$el.attr('view-url', j$(eleProp.oldValue).attr('view-url'));
        }, ["update"])
    }
}   
});

var ChildView = WrapperView.extend({
initialize: function() {
    WrapperView.prototype.initialize.apply(this);
    this.track();
}
});
主干将调用------->ChildView.initialize------->WrapperView.initialize()

由于ChildView.initialize函数调用位于调用堆栈中,因此我可以获取文件路径

我想要的是: 尽管上述解决方案正在运行,但我不想在WrapperView中包含我的跟踪逻辑,因为它可能无法保证所有子视图都将调用WrapperView.prototype.initialize,而且我不想触及框架src。所以为了解决这个问题,我在Backbone.View(Js插件)中加入了跟踪逻辑,而不是WrapperView

(function(){
var _viewExtend = Backbone.View.extend;
var newExtend = function (protoProps, classProps) {
    var _init = protoProps.initialize;
    var newInit = function(){
        try{
            throw new Error("STACK");
        }
        catch(e){
            this.$el.attr('view-url', e.stack.match(/\bhttps?:\/\/.*js*(?=(?:(?!http)[\s\S])*https?:\/\/\S*backbone-min\.js)/)[0]);
        }

        if(Object.observe){
            Object.observe(this, function(changes){
                var eleProp = _.filter(changes, function(prop){ return prop.name == "$el"; })[0];
                if(!eleProp) return;
                eleProp.object.$el.attr('view-url', j$(eleProp.oldValue).attr('view-url'));
            }, ["update"]);
        }
        return _init.apply(this, arguments);
    };
    protoProps.initialize = newInit; 
    return _viewExtend.call(this, protoProps, classProps);
};
Backbone.View.extend = newExtend;
})();
但是调用堆栈不包括childview文件路径,因为没有从childview调用,所以请帮助我找到一种方法来完成这些事情

主干将调用------->newInit(此处生成的堆栈)--->Childview.initialize()


注意:如果有任何其他方法可以达到要求,请让我知道。

可能重复@PaulSweatte Nope,这是另一种情况。我有一个函数指针,我想知道函数src js file path。类似于chrome dev工具显示文件路径的方式,其中包含函数指针的行号(参考)