对于依赖于另一个文件夹中的基本文件的 Browserify 文件,如何获取 NodeJS 中的当前文件夹?
How do I get the current folder in NodeJS for a Browserify'd file that relies on a base file in another folder?
我正在使用 AmpersandJS,我正在尝试模拟 Ember 的 pod 结构,而不是典型的文件夹类型结构:
app
|-- views
|-- index.js
|-- login.js
|-- people.js
|-- templates
|-- index.jade
|-- login.jade
|-- people.jade
您改为拥有每个组件的文件夹:
app
|-- index
|-- view.js
|-- template.jade
|-- login
|-- view.js
|-- template.jade
|-- people
|-- view.js
|-- template.jade
|-- base-view.js
我正在使用 templatizer 来编译我的模板:
templatizer(__dirname + '/app', __dirname + '/app/templates.js');
这将使模板对象看起来像这样(为了解释而简化):
{
"index.template": "<div>index</div>",
"login.template": "<div>login</div>",
"people.template": "<div>people</div>"
}
在基本视图中,我有以下内容,按照约定 return 模板:
var BaseView = AmpersandView.extend({
template: function() {
// pretend that I'm cleaning up __dirname here
return templates[__dirname].template;
}
});
在我的其他视图中,我扩展了基本视图:
// in app/index/view.js:
var IndexView = BaseView.extend({ ... });
我 运行 遇到的问题是,当基础视图通过 Browserify 时,__dirname
被设置为基础视图模板的文件夹,而不是扩展它的视图.因此,__dirname
将始终是 /app
,即使 /app/index/view.js
是正在呈现的视图。
我想知道是否可以获取当前视图的目录名而不是基本视图。我知道我可以向基本视图将读取的每个视图添加类似 templatePath
的内容,但我正在努力避免必须这样做。
所以我认为这归结为 javascript 范围问题。您需要从每个子类视图的范围中获取 __dirname
并将其附加到实例上,以便覆盖正常工作。有几种方法可以实现这一点(我不熟悉 Ampersand 状态 extend
),但我的第一个建议是:
var IndexView = BaseView.extend({props: {__dirname: __dirname}});
这将在正确的范围内抓取 __dirname
并使其可用。然后,您需要实现引用 this.__dirname
而不仅仅是 __dirname
.
的 BaseView 模板函数
var BaseView = AmpersandView.extend({
template: function() {
// pretend that I'm cleaning up __dirname here
return templates[this.__dirname].template;
}
});
我正在使用 AmpersandJS,我正在尝试模拟 Ember 的 pod 结构,而不是典型的文件夹类型结构:
app
|-- views
|-- index.js
|-- login.js
|-- people.js
|-- templates
|-- index.jade
|-- login.jade
|-- people.jade
您改为拥有每个组件的文件夹:
app
|-- index
|-- view.js
|-- template.jade
|-- login
|-- view.js
|-- template.jade
|-- people
|-- view.js
|-- template.jade
|-- base-view.js
我正在使用 templatizer 来编译我的模板:
templatizer(__dirname + '/app', __dirname + '/app/templates.js');
这将使模板对象看起来像这样(为了解释而简化):
{
"index.template": "<div>index</div>",
"login.template": "<div>login</div>",
"people.template": "<div>people</div>"
}
在基本视图中,我有以下内容,按照约定 return 模板:
var BaseView = AmpersandView.extend({
template: function() {
// pretend that I'm cleaning up __dirname here
return templates[__dirname].template;
}
});
在我的其他视图中,我扩展了基本视图:
// in app/index/view.js:
var IndexView = BaseView.extend({ ... });
我 运行 遇到的问题是,当基础视图通过 Browserify 时,__dirname
被设置为基础视图模板的文件夹,而不是扩展它的视图.因此,__dirname
将始终是 /app
,即使 /app/index/view.js
是正在呈现的视图。
我想知道是否可以获取当前视图的目录名而不是基本视图。我知道我可以向基本视图将读取的每个视图添加类似 templatePath
的内容,但我正在努力避免必须这样做。
所以我认为这归结为 javascript 范围问题。您需要从每个子类视图的范围中获取 __dirname
并将其附加到实例上,以便覆盖正常工作。有几种方法可以实现这一点(我不熟悉 Ampersand 状态 extend
),但我的第一个建议是:
var IndexView = BaseView.extend({props: {__dirname: __dirname}});
这将在正确的范围内抓取 __dirname
并使其可用。然后,您需要实现引用 this.__dirname
而不仅仅是 __dirname
.
var BaseView = AmpersandView.extend({
template: function() {
// pretend that I'm cleaning up __dirname here
return templates[this.__dirname].template;
}
});