2017-01-17 75 views
1

我使用敲除和打字稿打開基於條件的對話框。 if語句有效,但對話框不會使用下面的代碼進行切換。任何幫助將不勝感激。使用打字稿/敲除不打開的JQuery對話框

打字稿:

class SearchMTRModel { 
    mtrWarnElement: JQuery; 
    allowDuplicates : KnockoutObservable<boolean>; 
} 
  • 初始化函數:

    var model = new SearchMTRModel(); 
    
    $(() => { 
    ko.applyBindings(model); 
    search(); 
    
    model.mtrWarnElement = $('#mtrWarnDialog').dialog({ 
          autoOpen: false, 
          modal: true, 
          title: 'Duplicate MTR detected.', 
          buttons: { 
           'Cancel':() => { 
            model.allowDuplicates = ko.observable(false); 
            model.mtrWarnElement.dialog('close'); 
    
           }, 
           'Confirm':() => { 
            var heats = new MTRHeat(); 
            model.allowDuplicates = ko.observable(true); 
            addPDFToPackage(heats); 
            model.mtrWarnElement.dialog('close'); 
           } 
          }, 
         close:() => { 
          model.allowDuplicates(false); 
          model.allowDuplicates = ko.observable(false); 
          model.mtrWarnElement.dialog('close'); 
          } 
        }); 
    }); 
    

是應該打開對話框的功能:

export function addPDFToPackage(heat: MTRHeat): void { 


    var koHeat: MTRHeatWithInclude = ko.mapping.fromJS(heat); 
    koHeat.Include = ko.observable(true); 

    var mtrID = koHeat.MTR.MTRID(); 

    var mtrIDs = []; 

    var addToHeats =() => model.mtrPackage.Heats.push(koHeat); 

    var arrayOfHeats = model.mtrPackage.Heats(); 
    for (var i = 0; i < arrayOfHeats.length; i++) { 
     mtrIDs.push(arrayOfHeats[i].MTRID()); 
    } 
    var idx = mtrIDs.indexOf(mtrID); 

    if (idx >= 0) { 

     //the code gets here but dialog doesn't open. 

     model.mtrWarnElement.dialog('open'); 
    } 
    else if (idx === -1 || model.allowDuplicates()) { 
     addHeatToPackage(model.mtrPackage.PackageID(), heat.HeatID).done(addToHeats); 
     } 
    } 
} 

HTML

<div id="mtrWarnDialog" data-bind="dialog: { autoOpen: false, modal: true}"> 

</div> 
+1

在你的HTML中,你的自定義綁定是做什麼的? data-bind =「對話框:{autoOpen:false,model:true}」。它看起來像你在初始化手動調用.dialog(),所以我不知道你爲什麼需要這兩個。 –

回答

1

上市代碼是非常不清楚,因爲這應該打開jQuery的對話框代碼,似乎是在對話框內的確認鍵來觸發。 除此之外,你的HTML代碼中似乎還有一個對話框BindingHandler,這裏沒有列出。


我以前用過的方法如下。

添加屬性到您的組件視圖模型,這表明是否應該所示的對話框或不

public showModal: KnockoutObservable<boolean> = ko.observable(false); 

添加BindingHandler的jQuery的模態的對話中。這個在stackoverflow上有很多examples。 確保註冊BindingHandler,否則它將不起作用。

ko.bindingHandlers.modal = ... 

在模板中,手從你的ViewModel到BindingHandler公共財產,是這樣的:

<div data-bind="dialog: { dialogVisible: showModal }"></div> 

最後,在視圖模型的屬性設置爲真/假和模態應該打開/關。

this.showModal(true);