0

Office 365 ライブラリを使用して、グローバル オブジェクトOfficeを介してアプリケーションに公開されている Outlook 電子メール コンテキストにアクセスする組み込みアプリケーションを作成しています。

私はすでに次のようなHTMLページにスクリプトURLを含めたJavaScriptアプリケーションを作成しました:

<script type="text/javascript" src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>

以下のようなES6 JavaScript関数でコンテキストにアクセスした後:

 Office.initialize = function (reason) {
            $(document).ready(function () { 
                 Office.context.mailbox.addHandlerAsync(Office.EventType.ItemChanged, callbackfunction);
            });
        };

scala JSでも同じことをしたいです。

そのために、上記の方法でhtmlにOffice jsライブラリを含めました。

次のような Office オブジェクトにアクセスしようとした後:

@js.native
@JSGlobal
object Office extends js.Any {
  def initialize(f: String => Unit):js.Any = js.native
}

この Office オブジェクトを呼び出すと、エラーがスローされます。

def callback = (reason:String) => {
  println(s"reason called in callback function => $reason")
}
Office.initialize(callback)

scala JSでofficeオブジェクトをインスタンス化してアクセスする方法は?

エラー :

VM3981 playground-fastopt-bundle.js:4078 Uncaught TypeError: $g.Office.initialize is not a function
    at HTMLDocument.<anonymous> (VM3981 playground-fastopt-bundle.js:4078)
    at mightThrow (VM4209 playground-fastopt-bundle.js:25770)
    at process (VM4209 playground-fastopt-bundle.js:25838)

初期化は Office オブジェクトでは使用できません。実行時に関数をロードする必要があります。エラーメッセージ :

Office.initialize 関数に初期化コードを追加します。

コードの要点: https://gist.github.com/rajeevprasanna/8d4f193bc328f2c2d48e113960fb25a6

4

3 に答える 3

0

以下のアプローチでこの問題を解決しました:

エラーメッセージに従って、Office.initialize関数に初期化コードを追加します。関数をロードするプロパティを定義する必要があります。

@js.native
@JSGlobal
object Office extends js.Object {
  var initialize:js.Function1[String, _] = js.native
}

上記の関数をロードした後:

Office.initialize = { r:String =>
        println(s"function initialized. reason => $r")
      }

このアプローチは、ボタン クリックのイベント処理に似ています。

参照: https://github.com/scala-js/scala-js-dom/blob/5adf7290a4b1fdf7759dfed120e4050f87d9f0a2/src/main/scala/org/scalajs/dom/raw/Html.scala#L416

于 2017-10-03T03:21:31.107 に答える