2016-09-07 5 views
2

私は、検索ページ "/共有/ページ/ DP/WS /ファセット検索" でAlfrescoは5.1.eアイカウ。ダイアログ内のカスタムウィジェット内で検索クエリのパラメータを取得するにはどうすればよいですか?

を使用しています。私はボタン "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"を含めると、私のウィジェットの依存性があります。私はそれを "ソート"、 "サイト"、 "ソートアクセス"などのようなクエリのいくつかの情報にアクセスできますが、 "用語"はアクセスできません。
  • "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 
      } 
     } 
     ] 
    } 
    } 
}; 

ここで重要なことは、あなたのpublishPayloadwidgetsContent.0.config.searchTermプロパティにsearchTerm URLのハッシュ値をマッピングしていることです。つまり、ダイアログ内のカスタムウィジェットには、最後に使用された検索用語(ウィジェットが参照できる属性、searchTermとも呼ばれます)が割り当てられます。

2

ALF_SEARCH_REQUESTトピックを購読して、あなたが正しい道にいると思います。 AlfDynamicPayloadButtonが登録を登録する前に、最初のALF_SEARCH_REQUESTトピック(ページの読み込み中)が公開されていることが判明した場合は、より新しいAikauリリースにアップグレードすることを検討してください。

1.0.68リリースでは、すべてのウィジェットがページに読み込みを完了するまで発行されないように、を修正しました(これは実際にページに複数のSurfコンポーネントがある場合に対処するためのものでした)ファセット検索ページの場合です!)。この問題を回避するには、すべてのウィジェットとサービスが作成されるまで公開されない共有シングルトンPubQueueを発行します。あなたはAlfDynamicPayloadButtonを作成しているところ、私はこれができたと仮定し

は異なり - それは検索結果にいた場合例えば、それはALF_SEARCH_REQUESTトピックが公開されている後を作成されます。

DebugLogを確認して、ボタンのサブスクリプションが正しく設定されていることを確認しましたか(たとえば、スコープの問題はないとしますか?)。

固定ペイロード(データがハードコードされている)によって必要なダイアログが表示されることを確認しましたか?ボタンがトピックに正常に登録されていないが、必要に応じてペイロードを作成していないことを確認しましたか?

AlfDynamicPayloadButtonの設定を表示するために質問を更新して、問題の原因を突き止めてください。今あなたは私が良い答えを提供することができるかもしれないと思うモデルを追加したことを

+0

私の質問にいくつか変更を加えました。私は自分のコードを書いています。最終的に私の望むのは、私のウィジェットの中に最後の "検索パラメータ"を置くことです。そしてボタンがクリックされるたびに、それはその中のすべてを破壊する私のウィジェットの新しいインスタンスを作成します。 inspect要素では、検索クエリのすべてのパラメータがダイアログウィジェットの内部にあることを確認しましたが、ウィジェットにそれらを渡す方法はわかりません。ウィジェットが作成される前にイベント「ALF_SEARCH_REQUEST」がトリガーされるため、私のコードは機能していないと思います。最後の検索リクエストパラメータをどこかに保存していますか? – Troncador

関連する問題