Javascript KnockoutJS正在丢失viewmodel

Javascript KnockoutJS正在丢失viewmodel,javascript,jquery,mvvm,knockout.js,Javascript,Jquery,Mvvm,Knockout.js,我在概念验证方面遇到了一些问题。我试图做的是在单击按钮时弹出一个jQuery对话框。对话框内容绑定到viewmodel,对话框调用json服务来检索一些数据以填充该viewmodel 我这里的代码遇到了两个问题: vmAccount viewmodel仅在div在初始页面加载时可见时才会绑定 vmAccount viewmodel在SearchForCustomerAccounts或DisplayResults中未定义,尽管它是这些帐户的全局变量 $(函数(){ var vmAccount

我在概念验证方面遇到了一些问题。我试图做的是在单击按钮时弹出一个jQuery对话框。对话框内容绑定到viewmodel,对话框调用json服务来检索一些数据以填充该viewmodel

我这里的代码遇到了两个问题:

  • vmAccount viewmodel仅在div在初始页面加载时可见时才会绑定
  • vmAccount viewmodel在SearchForCustomerAccounts或DisplayResults中未定义,尽管它是这些帐户的全局变量
$(函数(){
var vmAccount=函数(){
var self=这个;
this.Accounts=ko.observearray();
this.Name=ko.observable('Jimmy');
};
函数DisplayDialog(){
$(“#对话框”)。对话框({
可调整大小:false,
身高:140,
莫代尔:是的,
按钮:{
“搜索”:函数(){
SearchForCustomerAccounts();
},
取消:函数(){
$(此).dialog(“关闭”);
}
}
});
}
函数SearchForCustomerAccounts(){
console.log(“名称:”+vmAccount.Name);
$.ajax({
url:“api/CustomerSearchController/”+vmAccount.Name,
键入:“获取”,
数据类型:“json”,
成功:功能(数据){
显示结果(数据);
}
});
}
函数显示结果(数据){
vmAccount.Accounts.removeAll();
对于(变量i=0;i

打开
客户名称


代码应该是这样的,vmAccount是空的,因为函数没有返回任何内容

var vmAccount = function() {
var self = this;
this.Accounts = ko.observableArray();
this.Name = ko.observable('Jimmy');
return this;
})

1)您的
vmAccount
是一个函数,但您尝试像实例一样使用它

2) 要从KO的可观测值中获取值,您应该将其称为(展开值)。 因此,请使用
vmAccount.Name()
而不是
vmAccount.Name

$(函数(){
函数VmAccount(){
var self=这个;
this.Accounts=ko.observearray();
this.Name=ko.observable('Jimmy');
};
var vmAccount=新的vmAccount();
函数DisplayDialog(){
$(“#对话框”)。对话框({
可调整大小:false,
身高:140,
莫代尔:是的,
按钮:{
“搜索”:函数(){
SearchForCustomerAccounts();
},
取消:函数(){
$(此).dialog(“关闭”);
}
}
});
}
函数SearchForCustomerAccounts(){
log(“Name:+vmAccount.Name());
$.ajax({
url:“api/CustomerSearchController/”+vmAccount.Name(),
键入:“获取”,
数据类型:“json”,
成功:功能(数据){
显示结果(数据);
}
});
}
函数显示结果(数据){
vmAccount.Accounts.removeAll();
对于(变量i=0;i

打开
客户名称

$(函数(){
var vmAccount={
账户:ko.observearray(),
名称:ko.observable('Jimmy'),
};
函数DisplayDialog(){
$(“#对话框”)。对话框({
可调整大小:false,
身高:140,
莫代尔:是的,
按钮:{
“搜索”:函数(){
SearchForCustomerAccounts();
},
取消:函数(){
$(此).dialog(“关闭”);
}
}
});
}
函数SearchForCustomerAccounts(){
log(“Name:+vmAccount.Name());
$.ajax({
url:“api/CustomerSearchController/”+vmAccount.Name(),
键入:“获取”,
数据类型:“json”,
成功:功能(数据){
显示结果(数据);
}
});
}
函数显示结果(数据){
vmAccount.Accounts.removeAll();
对于(变量i=0;i

打开
客户名称


您的代码段缺少jQuery UIWhoops忘记使用stackoverflow编码段工具添加该引用是的,它解决了第二个问题谢谢您的帮助:)