2

我正在使用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”依赖于我的小部件。我可以使用它访问查询的一些信息,例如“排序”、“站点”、“排序升序”等,但不能访问“术语”。
  • 包括“alfresco/search/AlfSearchList”依赖于我的小部件。我有“searchTerm”,但它总是空的“”。
  • 在我的按钮中使用“publishPayloadSubscriptions”。查询参数的所有信息都在对话框内,但不存在使用该信息填充我的小部件的选项

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

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

4

2 回答 2

2

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

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

我想这可能取决于您在哪里创建AlfDynamicPayloadButton- 例如,如果它在搜索结果中,那么它将在主题发布后创建。ALF_SEARCH_REQUEST

您是否检查了 DebugLog 以确保您的按钮中的订阅设置正确(例如,没有范围问题?)。

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

您能否更新您的问题以显示您的配置,AlfDynamicPayloadButton因为这可能会帮助我找出问题所在。

于 2016-09-07T08:18:40.937 回答
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
          }
        }
      ]
    }
  }
};

这里的关键是您将URLsearchTerm哈希值映射到. 这意味着您对话框中的自定义小部件将被分配最后使用的搜索词(分配给您的小部件可以引用的也称为属性的属性)。widgetsContent.0.config.searchTermpublishPayloadsearchTerm

于 2016-09-09T10:19:31.853 回答