2016-09-07 50 views
2

我使用露天5.1.e在Aikau。如何在對話框中的自定義小部件中獲取搜索查詢參數?

在搜索頁面 「/股/頁/ DP/WS /面搜索」。我已經包含一個按鈕「AlfDynamicPayloadButton」。

單擊該按鈕時,將打開一個對話框,其中顯示「ALF_CREATE_DIALOG_REQUEST」,並在其內部顯示我的自定義小部件。

我需要當前的搜索參數進入該小部件來創建一個特殊的可視化。

我的文件 「方位-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」。
  • 包含「alfresco/search/AlfSearchList」具有我的小部件的相關性。我有「searchTerm」,但它總是空的「」。
  • 在我的按鈕中使用「publishPayloadSubscriptions」。查詢參數的所有信息都在對話框內,但它不存在選項來填充我的小部件與信息

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

是否有某種方式來獲得的最後一個查詢的所有參數在我的自定義小部件?

回答

2

OK,現在你已經加入,我想我或許能提供一個更好的答案模型...

它看起來像你剛纔複製從JSDoc的例子。如果您已經設置了hashDataMapping配置,則實際上可以重新配置它以獲取搜索詞。

每次搜索時,都會在URL上將搜索文本設置爲searchTerm散列參數。這意味着,useHash配置是正確的,你可以配置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 URL的哈希值映射到您的publishPayloadwidgetsContent.0.config.searchTerm財產。這意味着您的對話框中的自定義小部件將被分配最後一次使用的搜索項(對於您的小部件可引用的也稱爲searchTerm的屬性)。

2

我認爲你在正確的道路上訂閱ALF_SEARCH_REQUEST的話題。如果您在AlfDynamicPayloadButton註冊訂閱之前發現ALF_SEARCH_REQUEST主題(在加載頁面時)正在發佈,那麼您可能需要考慮升級到更新的Aikau版本。

我們在1.0.68發行版中修復了issue,以確保在所有小部件完成頁面加載之前不會發布任何發佈(這實際上是爲了解決頁面上存在多個Surf組件的情況,在分面搜索頁面就是這種情況!)。我們通過共享單身人士PubQueue解決了這個問題,該單身人員在創建所有小部件和服務之後纔會發佈任何發佈。

我想這可能取決於你在哪裏創建AlfDynamicPayloadButton - 例如,如果它在搜索結果的話,它會創建ALF_SEARCH_REQUEST主題已經公佈。

您是否檢查過DebugLog以確保您的按鈕中的訂閱正確設置(例如沒有範圍問題?)。

您是否驗證過固定有效負載(帶有硬編碼數據)會導致按需顯示對話框?您是否驗證過該按鈕沒有成功訂閱該主題,但沒有根據需要構建有效負載。

您是否還可以更新您的問題以顯示您的AlfDynamicPayloadButton的配置,因爲這可能會幫助我找出問題所在。

+0

我在我的問題上做了一些改變,我把我的代碼。最後我想要的是在我的小部件中有最後的「搜索參數」。顯然,每次單擊按鈕時,它都會創建一個新的小部件實例,從而摧毀其中的所有內容。通過檢查元素,我檢查了搜索查詢的所有參數都位於對話框小部件的內部,但我不知道如何將它們傳遞給我的小部件。我認爲我的代碼無法運行,因爲事件「ALF_SEARCH_REQUEST」在我的窗口小部件創建之前觸發。有沒有地方存儲最後的搜索請求參數? – Troncador

相關問題