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

Json 在爱考。如何在对话框中的自定义小部件中获取搜索查询参数?,json,widget,alfresco,alfresco-share,aikau,Json,Widget,Alfresco,Alfresco Share,Aikau,我正在使用Alfresco 5.1.e 在搜索页面中“/share/page/dp/ws/faceted search”。我已经包括了一个按钮“AlfDynamicPayloadButton” 单击按钮时,会打开一个对话框,其中包含“ALF_创建_对话框_请求”和“我的自定义小部件” 我需要将当前搜索参数输入到该小部件中,以创建特殊的可视化效果 我在文件“faceted search.get.js”中的代码: 我的小部件: define( [ "dojo/_base/declare",

我正在使用Alfresco 5.1.e

在搜索页面中“/share/page/dp/ws/faceted search”。我已经包括了一个按钮“AlfDynamicPayloadButton”

单击按钮时,会打开一个对话框,其中包含“ALF_创建_对话框_请求”和“我的自定义小部件”

我需要将当前搜索参数输入到该小部件中,以创建特殊的可视化效果

我在文件“faceted search.get.js”中的代码:

我的小部件:

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_搜索请求。问题是当主题发布时,小部件还没有被创建
  • Include“alfresco/services/SearchService”依赖于我的小部件。我可以通过它访问一些查询信息,如“排序”、“站点”、“排序中心”等,但不能访问“术语”
  • Include“alfresco/search/alfresearchlist”依赖于我的小部件。我有“searchTerm”,但它总是空的
  • 在我的按钮中使用“publishPayloadSubscriptions”。查询参数的所有信息都在对话框中,但不存在用该信息填充我的小部件的选项

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

有什么方法可以在我的自定义小部件中获取最后一个查询的所有参数吗?

我认为您订阅
ALF\u SEARCH\u请求的路径是正确的。如果你发现最初的<代码> AlfthSexChyRead 主题(加载页面)在你的<代码> AlfDynamicPayloadButton < /COD>已经注册它的订阅之前被发布,那么你可能想考虑升级到一个更为新近的AIKAU版本。p>
我们在1.0.68版本中修复了一个问题,以确保在所有窗口小部件完成页面加载之前不会触发发布(这实际上是为了解决页面上存在多个冲浪组件的情况,而在faceted搜索页面上不应如此!)。我们通过拥有一个共享的singleton
PubQueue
来解决这个问题,它在创建所有小部件和服务之前不会发布任何发布

我想这可能取决于您在哪里创建
AlfDynamicPayloadButton
——例如,如果它在搜索结果中,那么它将在
ALF\u搜索请求
主题发布后创建

是否已检查调试日志以确保按钮中的订阅设置正确(例如,没有范围问题?)

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


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

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

看起来您刚刚从中复制了示例。在您设置了
hashDataMapping
配置的地方,您实际上可以重新配置它以获取搜索词

每次搜索时,URL上将搜索文本设置为
searchTerm
hash参数。这意味着,当
useHash
配置为true时,您可以如下配置AlfDynamicPayload按钮:

{
  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
URL散列值映射到
publishPayload
widgetsContent.0.config.searchTerm
属性。这意味着您对话框中的自定义小部件将被分配上次使用的搜索词(到小部件可以引用的属性,也称为
searchTerm

我在我的问题中做了一些更改,我把我的代码放进去了。最后,我希望在我的小部件中有最后一个“搜索参数”。显然,每次点击按钮时,它都会创建一个新的小部件实例,破坏其中的一切。使用inspect元素,我检查了搜索查询的所有参数是否都在对话框小部件中,但我不知道如何将它们传递给我的小部件。我认为我的代码不起作用,因为“ALF_SEARCH_REQUEST”事件是在我的小部件创建之前触发的。是否有存储上次搜索请求参数的地方?
{
  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
          }
        }
      ]
    }
  }
};