2017-01-17 35 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);