1

好吧,我試圖使用視覺工作室新的多設備混合應用程序項目設置使用鍵入腳本與劍道移動。我有一個包含以下代碼的文件名爲main.ts:全球應用程序變量不斷回來,因爲未定義

/// <reference path="../typings/require.d.ts" /> 

import MyApplication = require('../app/MyApplication'); 
var App: MyApplication; 

document.addEventListener("deviceready", function() 
{  
    App = new MyApplication(); 
}, false); 

劍道應用程序的初始化是在所有MyApplication構造函數中發生。同樣在構造函數中,我傳入初始視圖,以便kendo應用程序知道首先顯示哪個視圖。以下是MyApplication類的代碼。

/// <reference path="../typings/require.d.ts" /> 

import PrimaryController = require("../app/controllers/PrimaryController"); 

class MyApplication 
{ 
    KendoApp: kendo.mobile.Application; 
    PrimaryController: PrimaryController; 

    constructor() 
    { 
     this.InitializeControllers(); 
     this.InitializeKendoApp(); 
    } 

    private InitializeControllers() 
    { 
     this.PrimaryController = new PrimaryController(this); 
    } 

    private InitializeKendoApp() 
    { 
     var appOptions: kendo.mobile.ApplicationOptions = {}; 
     appOptions.initial = this.PrimaryController.View; 
     appOptions.layout = "app-layout"; 
     appOptions.transition = "slide"; 

     this.KendoApp = new kendo.mobile.Application($(document.body), appOptions); 
    } 
} 

export = MyApplication; 

所以在我的index.html我也有這個調用requirejs應調用main.js和實例我的全球應用程序變量。

data-show="App.PrimaryController.OnViewShow" 

當數據顯示屬性:

<script src="scripts/frameworks/require.js" data-main="scripts/app/main.js"></script> 
在這我想顯示(primaryview.html)對我已經設置了數據顯示屬性如下主要DIV的觀點

現在是目前我收到一個錯誤,說:「不能讀取未定義的'PrimaryController'屬性 - 即我的全局應用程序變量永遠不會實例化。

如果我刪除data-show屬性,那麼它「出現」應用程序變量被實例化,因爲primaryview.html如預期的那樣顯示,如前所述,我在MyApplication的構造函數中設置初始視圖。我唯一懷疑實例化是否發生的原因是我在main.ts中設置了斷點,但即使數據顯示已被刪除並顯示視圖,它們也不會被觸發。

任何人對這裏發生了什麼有任何想法?我想也許我需要在main.ts中包含一個對require.config()的調用,並且試圖使用我通過google搜索找到的示例來設置它,但沒有任何工作。

回答

3

只要你做出進口聲明文件成爲包裹在文件中define和全局變量不再全球即可以用window這樣:

import MyApplication = require('../app/MyApplication'); 
var App: MyApplication; 

應用程序是不在窗口上。

你可以做以下雖然把在窗口:

document.addEventListener("deviceready", function() 
{  
    (<any>window).App = new MyApplication(); 
}, false); 
+1

謝謝老兄!我已經嘗試過(沒有演員),它不會生成,因爲應用程序屬性不存在於窗口上,但演員完全負責處理這個問題。我從未想過要演員。我知道我們不是想用這些評論來表達謝意,而是用這個評論 - 謝謝你謝謝你謝謝你! –

+0

@ RollTide73這樣的評論使這一切都值得;) – basarat