Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用typescript/knockout的JQuery对话框未打开_Javascript_Jquery_Typescript_Knockout.js - Fatal编程技术网

Javascript 使用typescript/knockout的JQuery对话框未打开

Javascript 使用typescript/knockout的JQuery对话框未打开,javascript,jquery,typescript,knockout.js,Javascript,Jquery,Typescript,Knockout.js,我使用knockout和typescript打开一个基于条件的对话框。if语句可以工作,但不能使用下面的代码切换对话框。任何帮助都将不胜感激 打字稿: class SearchMTRModel { mtrWarnElement: JQuery; allowDuplicates : KnockoutObservable<boolean>; } 用于打开对话框的函数: export function addPDFToPackage(heat: MTRHeat):

我使用knockout和typescript打开一个基于条件的对话框。if语句可以工作,但不能使用下面的代码切换对话框。任何帮助都将不胜感激

打字稿:

class SearchMTRModel {
    mtrWarnElement: JQuery;
    allowDuplicates : KnockoutObservable<boolean>;
 }
用于打开对话框的函数:

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);
        } 
    }
}
导出函数addPDFToPackage(热量:MTRHeat):无效{
var koHeat:MTRHeatWithInclude=ko.mapping.fromJS(heat);
koHeat.Include=ko.可观察(真);
var mtrID=koHeat.MTR.mtrID();
var mtrIDs=[];
var addToHeats=()=>model.mtrPackage.Heats.push(koHeat);
var arrayOfHeats=model.mtrPackage.Heats();
对于(变量i=0;i=0){
//代码到达这里,但对话框没有打开。
model.mtrWarneElement.dialog('open');
} 
else if(idx==-1 | | model.allowDuplicates()){
addHeatToPackage(model.mtrPackage.PackageID(),heat.HeatID).done(addToHeats);
} 
}
}
HTML


列出的代码非常不清楚,因为应该打开jQuery对话框的代码似乎是由对话框内的确认按钮触发的。 除此之外,您的HTML代码中似乎还有一个对话框BindingHandler,这里没有列出


我过去使用的方法如下

在组件ViewModel中添加属性,该属性指示是否应显示该对话框

public showModal: KnockoutObservable<boolean> = ko.observable(false);
在模板中,将ViewModel中的公共属性交给BindingHandler,类似于:

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

在HTML中,自定义绑定的作用是什么?data bind=“dialog:{autoOpen:false,model:true}”。看起来您正在初始化中手动调用.dialog(),所以我不确定您为什么需要两者。
public showModal: KnockoutObservable<boolean> = ko.observable(false);
ko.bindingHandlers.modal = ...
<div data-bind="dialog: { dialogVisible: showModal }"></div>
this.showModal(true);