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