I'm using knockout and typescript to open a dialog based on a conditional. The if statement works, but the dialog doesn't get toggled using the code below. Any help would be greatly appreciated.
TypeScript:
class SearchMTRModel {
mtrWarnElement: JQuery;
allowDuplicates : KnockoutObservable<boolean>;
}
Initialize function :
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'); } }); });
The function that is supposed to open the dialog :
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>