2017-09-27 33 views
0

進口我寫我在哪裏使用Office 365庫來訪問它通過全局對象辦公室通過URL在HTML

我已經寫JavaScript應用暴露在我的應用Outlook電子郵件上下文中的嵌入式應用程序訪問JavaScript對象在我包含在HTML頁面腳本的URL是這樣的:

<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中做同樣的事情。

對於包括Office js庫在html中的方式如上。

試圖訪問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

+0

究竟是什麼錯誤引發的?此外,你說你「想在Scala.js中做同樣的事情」,但Scala.js代碼片段可能*調用*'initialize',而JS代碼片段*定義*'initialize'。你想要做的是哪一個?如果你想調用它,它在哪裏定義? – sjrd

+0

我想調用初始化函數來初始化辦公室上下文對象,以訪問office對象上可用的字段。 – Rajeev

回答

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

0

考慮到誤差,似乎Office.initialize功能尚未在你嘗試調用它時創建的。 Office對象存在,但它沒有字段initialize(或它不是一個函數)。

這可能只是因爲您的script標籤的順序不正確。確保應該定義的腳本Office.initialize在之前執行Scala.js代碼。

+0

我movde代碼頂級定義。但沒有運氣。爲什麼它無法檢測到初始化函數?代碼要點:https://gist.github.com/rajeevprasanna/8d4f193bc328f2c2d48e113960fb25a6 – Rajeev

+0

有關於此的任何幫助? – Rajeev