2017-03-24 135 views
0

我是新來的打字稿和MVC,所以我甚至不確定我是否問正確的問題。但是我有用於多個搜索屏幕的功能相同的打字稿文件。所以我試圖將它合併到一個文件中,它將搜索屏幕名稱和區域(字符串)從此處起飛。有沒有一種方法可以將這些信息從視圖傳遞給打字稿文件?如何將字符串傳遞給模塊變量定義?

下面是我的腳本的上下文的一些代碼。

module HarSearch { 
    const area = ""; 
    const searchScreen = ""; 
    const gridName = searchScreen + "SearchGrid"; 
    const searchGrid = $(`#${gridName}`); 
    const gridOptionsStorageName = searchScreen + "GridOptions"; 
    const filtersStorageName = searchScreen + "SearchFilters"; 
    const filterFormName = "formFilters"; 
    var defaultGridOptions: kendo.ui.GridOptions; 

    $(function(e) { 
     var harSearchGridData = searchGrid.data("kendoGrid"); 
     KendoGridFunctions.resizeGrid(searchGrid, -25); 
     defaultGridOptions = harSearchGridData.getOptions(); 
     loadSearchState(); 
    }); 

    // more functions... 
} 

area和searchName值是我希望能夠設置的。

編輯:考慮下面的Paleo的建議,我想也許只是把我需要的變量打破它自己的類可能會讓我更接近。所以我編輯了一下我的代碼,但我仍然需要一種方法來設置這些變量。

class definitions { 
    public static area = ""; 
    public static searchName = ""; 
} 

module HarSearch { 
    const area = definitions.area; 
    const searchName = definitions.searchName; 
    . 
    . 
    . 
    // rest is the same 
} 
+0

你可以使用一個類或替代功能? (注意:你的「模塊」是一個[_namespace_](https://www.typescriptlang.org/docs/handbook/namespaces.html)。) – Paleo

+0

我真的試過了。我無法讓它適用於我的應用程序,但是因爲我需要訪問劍道網格,並且當我更改爲類時,我無法再獲取這些數據。對不起,我忘了在我的帖子中提到。 –

回答

0

這就是我最終做的。這不是我理想的解決方案,但它的工作原理。我並沒有最終將自己的變量分解到他們自己的班級中。他們仍然在模塊內。我在視圖中添加了一個腳本來設置全局變量,然後由模塊引用,其中我的Model.SearchArea和Model.SearchName只是字符串。

VIEW

<script type="text/javascript"> 
    $(function() { 
     searchArea = @Html.Raw(Json.Encode(Model.SearchArea)); 
     searchName = @Html.Raw(Json.Encode(Model.SearchName)); 
    }) 
</script> 

TS文件

module Search { 
    declare var searchArea: string; 
    declare var searchName: string; 
    var gridName: string; 
    var searchGrid: JQuery; 
    var gridOptionsStorageName: string; 
    var filtersStorageName: string; 
    const filterFormName = "formFilters"; 
    var defaultGridOptions: kendo.ui.GridOptions; 

    $(() => { 
     gridName = searchName + "SearchGrid"; 
     searchGrid = $(`#${gridName}`); 
     gridOptionsStorageName = searchName + "GridOptions"; 
     filtersStorageName = searchName + "SearchFilters"; 

     var searchGridData = searchGrid.data("kendoGrid"); 
     KendoGridFunctions.resizeGrid(searchGrid, -25); 
     defaultGridOptions = searchGridData.getOptions(); 
     loadSearchState(); 
    }); 

    . 
    . 
    . 
    //more functions 
} 
相關問題