我正在做一個Firefox插件,而不是在main.js中有整個腳本,我試圖切入不同的文件。定義一個函數作爲一個對象參數
現在,我有一個utils.js它看起來像這樣:
'use strict';
module.exports.utils = function() {
return {
_ : require('sdk/l10n').get,
self : require('sdk/self'),
sStorage : require('sdk/simple-storage'),
tabs : require('sdk/tabs'),
pageMod : require('sdk/page-mod'),
toggleButton: require('sdk/ui/button/toggle'),
panel : require('sdk/panel'),
hotkey : require('sdk/hotkeys'),
displayPanel: function(mainPanel, qwantButton) {
if (mainPanel.isShowing) {
mainPanel.hide();
qwantButton.state('window', {
checked: false
});
} else {
mainPanel.show({
position: qwantButton
});
}
}
};
}();
我導入utils.js
到main.js
這樣:var utils = require(utils);
兩個文件在同一位置是:[ROOT]/lib
。
但我遇到了一個錯誤,因爲這條線:_ : require('sdk/l10n').get,
爲_不是一個函數。 我試過這樣寫:_ : require('sdk/l10n').get(),
或get(str)
,但它們都失敗了,第一次因爲得到需要一個參數,第二次因爲str沒有定義。有沒有辦法定義這個項目?
[編輯]:多帶幾個嘗試,我發現寫utils.js
這樣做_
工作:
'use strict';
var _ = require('sdk/l10n').get,
self = require('sdk/self'),
sStorage = require('sdk/simple-storage'),
tabs = require('sdk/tabs'),
{PageMode} = require('sdk/page-mod'),
{ToggleButton}= require('sdk/ui/button/toggle'),
{Panel} = require('sdk/panel'),
{Hotkey} = require('sdk/hotkeys');
var qwantButton = new ToggleButton({
id: 'toolbar_button_id',
label: _('toolbar_button_label'),
icon: {
'16': './img/logo-16.png',
'32': './img/logo-32.png',
'64': './img/logo-64.png'
},
onClick: displayMainPanel
});
var mainPanel = new Panel({
width: 525,
height: 175,
contentURL: self.data.url('./panel.html'),
contentScriptFile: self.data.url('./js/panelScript.js')
});
var hotkey = new Hotkey({
combo: 'alt-Q',
onPress: displayMainPanel(qwantButton, mainPanel)
});
function displayMainPanel(mainPanel, qwantButton) {
if (mainPanel.isShowing) {
mainPanel.hide();
qwantButton.state('window', {
checked: false
});
} else {
mainPanel.show({
position: qwantButton
});
}
}
module.exports = function utils() {
return {
_ : _,
self : self,
sStorage : sStorage,
tabs : tabs,
hotkey : hotkey,
qwantButton : qwantButton,
mainPanel : mainPanel,
displayMainPanel: displayMainPanel
};
}();
但現在,需要的元素的方法不起作用(例如mainPanel.show()
)。 ..
在評估require('sdk/l10n')。get'時,或者在調用utils ._()'方法時,您真的會得到哪些錯誤? – Bergi 2014-08-29 14:48:10
調用'utils ._()'時。 – ss814 2014-08-29 16:09:57
那麼,如果它說'_'不是一個函數,那麼你就不能調用它。 Theck skd/l10n是否真的導出了一個'get'方法。 – Bergi 2014-08-29 16:17:10