从工具栏小部件onClick处理程序取消面板打开

时间:2012-10-15 11:19:38

标签: firefox firefox-addon firefox-addon-sdk

我有一个Firefox扩展,它添加了一个带有面板的工具栏Widget,该面板应该在单击小部件时显示。在某些情况下,单击工具栏小部件时,面板不应显示。

我正在实例化工具栏和面板:

var popup = panel.Panel({
  width: 310,
  height: 400,
  contentURL: self.data.url('panel.html'),
  contentScriptFile: self.data.url('panel.js'),
  // NOTE: You can't use the contentStyleFile option here.
});

var toolbarOptions = {
  id: 'someid',
  label: 'Some Label',
  contentURL: self.data.url('icon-16.png'),
  panel: popup
};

// There doesn't seem to be a way to remove the toolbar in PB mode.
var toolbar = widgets.Widget(toolbarOptions);

如何从窗口小部件单击处理程序中取消面板打开?无论我在那里写什么逻辑,似乎总是打开。

toolbar.on('click', function() {
  if (dontShowPanel()){
    // I want to somehow cancel the panel opening at this point.
  } else {
    panel.show();
  }
});

我尝试过点击处理中的return false;似乎不起作用。我也试过打电话给panel.hide()。这似乎也不起作用。

我正在使用附加SDK的1.10版本。

2 个答案:

答案 0 :(得分:1)

创建窗口小部件时,需要将面板实例添加为属性:

var panel = require("panel").Panel({
  width: 250,
  height: 250,
  contentURL: data.url('panel.html')
});

require("widget").Widget({
    id: 'id',
    label: 'my-label',
    contentURL: data.url('http://www.mozilla.org/favicon.ico'),
    panel: panel
});

更新:抱歉,我不明白整个问题。据我所知,没有办法有条件地阻止基于点击事件显示面板,以保持锚定的方式。

答案 1 :(得分:1)

在面板显示之前调用您的click事件处理程序,这意味着您仍然可以在此时更改面板。但是,一些不明显的事情:更改Widget对象的面板不会立即生效,您需要为WidgetView对象更改它(特定浏览器窗口中的窗口小部件实例) )。该对象作为参数传递给click事件处理程序。所以你的工具栏选项可能如下所示:

var toolbarOptions = {
  id: 'someid',
  label: 'Some Label',
  contentURL: self.data.url('icon-16.png'),
  onClick: function(view) {
    if (dontShowPanel()){
      view.panel = null;
    } else {
      view.panel = popup;
    }
  }
};