2013-04-12 49 views
3

有沒有人將Infragistics Ingite UI控件集成到Hot Towel/Durandal SPA應用程序中?Infragistics Ignite用熱毛巾/ Durandal SPA應用程序UI網格

我在一個基本的熱毛巾應用程序集成了這個IG樣本:

http://www.infragistics.com/products/jquery/sample/grid/grid-knockoutjs-integration

它可以用一個簡單的結合,如:

查看:

<table id="grid" data-bind="igGrid: { 
    dataSource: gridData, autoGenerateColumns: false, 
    columns: [ 
     { headerText: 'Product Name', key: 'Name', dataType: 'string' } 
    ]}"> 
</table> 

VM:

define(['services/logger'], function (logger) { 
    var vm = { 
     activate: activate, 
     title: 'Details View', 
     gridData: adventureWorks // Points to ig's JSON sample data 
    }; 

    return vm; 

    //#region Internal Methods 
    function activate() { 
     return true; 
    } 
    //#endregion 
}); 

這工作正常,呈現網格。但是,我只要我添加任何功能融入結合,如得到一個錯誤:

<table id="Table1" data-bind="igGrid: { 
    dataSource: gridData, autoGenerateColumns: false, 
    features: [ 
     { name: 'Sorting', type: 'local' } 
    ], 
    columns: [ 
     { headerText: 'Product Name', key: 'Name', dataType: 'string' } 
    ]}"> 
</table> 

的錯誤是「[」無法調用「_injectGrid」未定義」,‘查看/詳細信息’,對象] 」。

我使用jQuery.Migrate庫(如IG仍引用1.7和迪朗達爾要1.9),並且有這個加載從屬IG腳本:使用「傳統

$.ig.loader({ 
    scriptPath: "../App/Infragistics/js/", 
    cssPath: "../../Content/", 
    resources: "igGrid.*,extensions/infragistics.datasource.knockoutjs.js,extensions/infragistics.ui.grid.knockout-extensions.js" 
}); 

順便說一句我已經試過'用於創建網格的jQuery(即非KO)API,我遇到了更多問題!

任何幫助非常感謝。

+0

示例應用程序可以在這裏下載:http://www.monexa.co.uk/downloads/HotTowelIgniteTest.zip –

回答

4

我無法真正爲您提供100%合適的解決方案,但我可以告訴您爲什麼您得到了這個問題 - 不是因爲淘汰賽(或者不是因爲它) - 視圖與模型發生在實際視圖標記附加到文檔之前。它被加載爲一個片段我相信,所以igGrid嘗試使用jQuery來選擇它並附加功能小部件 - 顯然無法獲取那些尚未存在的項目。

我不熟悉熱毛巾,我不知道如何讓它首先附加標記,然後做Knockout綁定,所以我只是通過手動將片段手動附着到身體上來幫助它在ViewModelBinder.js

bind: function(obj, view) { 
    doBind(obj, view, function() { 
     if ((view.getAttribute("data-view") == "views/details") && ($(view).parent().length == 0)) { 
      $("#content").prepend(view); 
     } 
     ko.applyBindings(obj, view); 
     if (obj.setView) { 
      obj.setView(view); 
     } 
    }); 
} 

它幾乎適用這種方式(移動實際Durandal包裝使得它抽動了一下)。現在我知道這不是要走的路,但它是給你一個想法是什麼錯。另外,您可以添加

ko.applyBindings(settings.model, newChild); 

entrance.jsstartTransition功能,並刪除多餘的前插和從上述功能的綁定。仍然不是很好的過渡,但更好。

P.S.還注意到當你直接進入細節視圖時,你不需要等待加載器,注意Infragistics Loader是異步的,並且具有回調函數,這就是你實際等待加載器完成的方式:)

+0

謝謝你,這兩種方法似乎都有效。總的來說,我更喜歡轉換,因爲它很容易在Durandal中創建自己的轉換並插入它(儘管我也可以插入自定義的ViewModelBinder)。下一個主要版本的KO集成擴展可能會有很多更改,您是否有發佈時間表? –

0

我不確定,但因爲加載程序的請求異步infragistics網格 文件可能尚未加載。要看看這是否是問題,嘗試添加沒有像這樣的加載器的腳本,例如:

<link href="~/Content/IG/css/themes/infragistics/infragistics.theme.css" rel="stylesheet"type="text/css" /> 
<link href="~/Content/IG/css/structure/infragistics.css" rel="stylesheet" type="text/css" 
<script src="~/Scripts/IG/js/infragistics.js" type="text/javascript"></script> 

您還需要敲除網格綁定JavaScript文件。 試試看可能有用。

,如果你想保持裝載機將是解決延期對象 在裝載機的回調時,所有的紅外文件已加載和激活方法返回一個Deferred對象 另一個想法。

+0

我認爲可能是這樣,但我有應用程序啓動(shell.js)運行的加載程序,我不' t導航到視圖上的網格,直到我可以看到所有ig資源已被加載。我也可以從視圖導航,然後回到它,我得到同樣的問題。 –

相關問題