gpt4 book ai didi

javascript - 如何访问 apos.define 中的选项?

转载 作者:行者123 更新时间:2023-11-30 20:24:51 24 4
gpt4 key购买 nike

apostrophe-workflow 具有以下内容:

公共(public)/js/user.js

apos.define('apostrophe-workflow', {

[...]

construct: function(self, options) {

self.locales = options.locales;
self.locale = options.locale;
[...]

我搜索了很长时间,但没有找到这个构造方法可以访问 options 对象的原因。我尝试了 browserCall 但不确定如何正确使用它。

我的 Assets 也是使用 pushAsset 推送的。但是他们无权访问 apos.create 之后的选项。

编辑:示例场景:

一个将一个脚本推送到浏览器的简单模块。

模块/index.js

construct: function(self, options) {
self.pushAsset('script', 'name', {when: 'always'});
}

并接受一个选项。

应用程序.js

modules: {
'module': {
option: 'Option'
}
}

脚本应该在 construct 上使用这个选项。

模块/公共(public)/js/script.js

apos.define('module-script', {
construct: function(self, options) {
console.log(options.option); // Print 'Option' to console.
}
});

另一个模块将调用 apos.create('module-script')

我希望这很清楚。

最佳答案

根据您想要的结构,您可以(至少)通过这两种方式解决。

<强>1。显式浏览器选项

您可以将模块配置中的选项显式传递给浏览器,方法是将它们包装在模块配置根目录中的 browser 对象中。

lib/modules/layout-widgets/index.js

module.exports = {
extend: 'apostrophe-widgets',
label: 'Layout',
browser: {
coolArray: [3, 2, 1]
}
}

这将自动合并到传递给模块的浏览器端 JS 的选项中。

然后在 /lib/modules/layout-widgets/public/js/always.js

apos.define('layout-widgets', {
extend: 'apostrophe-widgets',
construct: function (self, options) {
self.play = function ($widget, data, options) {
console.log(self.options.coolArray);
}
}
});

2。 super getCreateSingletonOptions

如果您不喜欢将浏览器选项与主要选项分开的语法,您始终可以通过复制、调用和添加来覆盖负责设置浏览器端模块默认选项的方法。

lib/modules/layout-widgets/index.js

module.exports = {        
extend: 'apostrophe-widgets',
label: 'Layout',
coolArray: [3,2,1],
construct: function(self, options) {

// copy the method
var superGetCreateSingletonOptions = self.getCreateSingletonOptions;

// redefine it
self.getCreateSingletonOptions = function (req) {

// invoke the original method and save the result
var browserOptions = superGetCreateSingletonOptions(req);

// add on to the default results with whatever you want
browserOptions.coolArray = self.options.coolArray;
browserOptions.somethingElse = 'hey this is fun';

return browserOptions;
};
}
};

然后,再次在 /lib/modules/layout-widgets/public/js/always.js

apos.define('layout-widgets', {
extend: 'apostrophe-widgets',
construct: function (self, options) {
self.play = function ($widget, data, options) {
console.log(self.options.coolArray);
console.log(self.options.somethingElse);
}
}
});

关于javascript - 如何访问 apos.define 中的选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51030428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com