在Aikau。如何在对话框中的自定义窗口小部件中获取搜索查询参数?

时间:2016-09-07 06:29:53

标签: json widget alfresco alfresco-share aikau

我正在使用 Alfresco 5.1.e

在搜索页面" / share / page / dp / ws / faceted-search"。我已经包含了一个按钮" AlfDynamicPayloadButton"。

单击该按钮时,将打开一个对话框,其中包含" ALF_CREATE_DIALOG_REQUEST"并在其中我的自定义小部件。

我需要将当前搜索参数放入该窗口小部件中以创建特殊的可视化。

我在文件中的代码" faceted-search.get.js":

 var myWidget = {
   name : "alfresco/buttons/AlfDynamicPayloadButton",
   config : {
     label : "My Button",
     useHash : true,
     hashDataMapping : {
        "hashFragmentParameterName" : "buttonPayloadProperty"
     },
     publishPayloadSubscriptions : [ {
       topic : "ALF_SEARCH_REQUEST"
     }],

     publishTopic : "ALF_CREATE_DIALOG_REQUEST",
     publishPayloadType : "PROCESS",
     publishPayloadModifiers : [ "processDataBindings" ],
     publishPayload : {
       dialogTitle : "My Title",
       widgetsContent : [ {
         name : "myPackage/Example",
         config : {
           width : 400,
           height : 500
           // other configurations
         }
       }]
     }
   }
 };

 var widget = widgetUtils.findObject(model.jsonModel.widgets, "id",
   "FCTSRCH_TOP_MENU_BAR");
 widget.config.widgets.push(myWidget);

我的小工具:

define(
[ 
  "dojo/_base/declare", 
  "dijit/_WidgetBase", 
  "alfresco/core/Core",
  "dijit/_TemplatedMixin", 
  "dojo/_base/lang",
  "dojo/text!./html/Example.html" 
],
function(declare, _Widget, Core, _Templated, lang, template) {
    [ _Widget, Core, _Templated ],{
  templateString : template,
  i18nRequirements : [ {
    i18nFile : "./i18n/Example.properties"
  } ],
  cssRequirements : [ {
     cssFile : "./css/Example.css"
  } ],
  constructor : function example__constructor() {
    // the widget is created each time the button is pressed
    this.alfSubscribe("ALF_SEARCH_REQUEST", 
      lang.hitch(this, this.upgradeSearchParameter));
    this.inherited(arguments);  
  }, 
  upgradeSearchParameter: 
      function example__upgradeSearchParameter(args){
    // this line never run
    this.searchParameter = args;
   }
  });
});

到目前为止,我已经尝试过:

  • 在窗口小部件内订阅ALF_SEARCH_REQUEST。问题在于,在发布主题时创建了小部件。
  • 包括" alfresco / services / SearchService"有我的小部件的依赖。我可以使用它访问查询的某些信息,例如" sort"," site"," sortAscending"等,但不是" term& #34;
  • 包括" alfresco / search / AlfSearchList"有我的小部件的依赖。我有" searchTerm",但它总是空的""。
  • 使用" publishPayloadSubscriptions"在我的按钮。查询参数的所有信息都在对话框内,但不存在使用该信息填充我的窗口小部件的选项

    publishPayloadSubscriptions : [ {
      topic : "ALF_SEARCH_REQUEST"
    }],
    

有没有办法在我的自定义小部件中获取最后一个查询的所有参数?

2 个答案:

答案 0 :(得分:2)

我认为您正在订阅ALF_SEARCH_REQUEST主题的正确道路上。如果您发现在ALF_SEARCH_REQUEST注册其订阅之前发布了初始AlfDynamicPayloadButton主题(加载页面时),那么您可能需要考虑升级到更新的Aikau版本。

我们修复了1.0.68版本中的issue,以确保在页面上完成所有小部件加载之前不会触发任何发布(这实际上是为了解决页面上有多个Surf组件的情况)在分面搜索页面上应该不是这种情况!)。我们通过使用共享单例PubQueue来解决此问题,该单例AlfDynamicPayloadButton在创建所有窗口小部件和服务之前不会发布任何发布。

我认为这可能取决于您创建ALF_SEARCH_REQUEST的位置 - 例如,如果它在搜索结果中,则会在<{strong> AlfDynamicPayloadButton主题后创建已出版。

您是否检查过DebugLog以确保正确设置按钮中的订阅(例如没有作用域问题?)。

您是否已验证固定有效负载(带有硬编码数据)是否会导致根据需要显示对话框?您是否已验证该按钮未成功订阅该主题,但未按要求构建有效负载。

您是否还可以更新您的问题以显示 <StackPanel Orientation="Horizontal" VerticalAlignment="Top" Margin="0 0 0 0"> <Button x:Name="TrackLocationButton" Margin="120 20 0 0" Content="track location" Click="TrackLocationButton_Click"/> </StackPanel> <Maps:MapControl x:Name="MapControl1" HorizontalAlignment="Left" Height="500" Margin="30 100 0 0" Width="300" VerticalAlignment="Top"/> 的配置,因为这可以帮助我找出问题所在。

答案 1 :(得分:2)

好的,既然您已经添加了模型,我想我可能会提供更好的答案......

您好像刚刚从JSDoc复制了该示例。如果您已设置hashDataMapping配置,则可以实际重新配置此配置以获取搜索字词。

每次搜索时,搜索文本都会在URL上设置为searchTerm哈希参数。这意味着在useHash配置为true的情况下,您可以像这样配置AlfDynamicPayloadButton:

{
  name: "alfresco/buttons/AlfDynamicPayloadButton",
  config : {
    label : "My Button",
    useHash : true,
    hashDataMapping : {
      searchTerm: "widgetsContent.0.config.searchTerm"
    },
    publishPayloadSubscriptions: [],
    publishTopic: "ALF_CREATE_DIALOG_REQUEST",
    publishPayload: {
      dialogTitle: "My Title",
      widgetsContent: [
        {
          name: "myPackage/Example",
          config: {
            width : 400,
            height : 500
            // other configurations
          }
        }
      ]
    }
  }
};

这里的关键是您将searchTerm网址哈希值映射到widgetsContent.0.config.searchTerm的{​​{1}}属性。这意味着对话框中的自定义窗口小部件将被分配使用的最后一个搜索词(对于您的窗口小部件可以引用的属性也称为publishPayload)。