Javascript 选项绑定覆盖初始视图模型值
我试着遵循关于堆栈溢出的其他类似问题,但到目前为止都没有成功地解决这个问题 我正在使用jQueryAjax检索几个项目:联系人及其相关信息、所有可用的称呼类型、所有可用的电子邮件类型和所有可用的电话类型 我已成功地将选项绑定到选择框。但是,它似乎覆盖了保存初始视图模型值的“值”绑定 你们谁能帮我解决这个问题?如果您有任何问题需要澄清,请告诉我 请参阅下面的代码: 视图模型:Javascript 选项绑定覆盖初始视图模型值,javascript,jquery,ajax,knockout.js,Javascript,Jquery,Ajax,Knockout.js,我试着遵循关于堆栈溢出的其他类似问题,但到目前为止都没有成功地解决这个问题 我正在使用jQueryAjax检索几个项目:联系人及其相关信息、所有可用的称呼类型、所有可用的电子邮件类型和所有可用的电话类型 我已成功地将选项绑定到选择框。但是,它似乎覆盖了保存初始视图模型值的“值”绑定 你们谁能帮我解决这个问题?如果您有任何问题需要澄清,请告诉我 请参阅下面的代码: 视图模型: function contactPageViewModel() { var self = this; s
function contactPageViewModel() {
var self = this;
self.contact = ko.observable();
self.availableSalutations = ko.observableArray();
self.availableEmailTypes = ko.observableArray();
self.availablePhoneTypes = ko.observableArray();
self.availableAddressTypes = ko.observableArray();
}
其中contact是来自服务器的对象,其中包括元素contact.saltation
返回进行联系的json是:
{
//...
"createdBy":null,
"createdOn":1392848929000,
"updatedBy":null,
"updatedOn":1392848929000,
"contactId":305,
"salutation":{"salutationId":102,"salutation":"Mrs."},
"firstName":"Laura",
"middleInitial":"K",
"lastName":"Ritchey"
//...
}
作为json对象包装器“listObject”的属性,AvailablesAssertions返回的json是:
[{"salutationId":41,"salutation":"Ms."},
{"salutationId":101,"salutation":"Mr."},
{"salutationId":66,"salutation":"CDR"},
{"salutationId":81,"salutation":"LCDR"},
{"salutationId":102,"salutation":"Mrs."},
{"salutationId":121,"salutation":"Mr."},
{"salutationId":64,"salutation":"LTC"}]
将JSON结果映射到敲除观测值的代码:
contactPageViewModel.contact = ko.mapping.fromJS(data.listObject[0]);
contactPageViewModel.availableEmailTypes = ko.mapping
.fromJS(data.listObject[1]);
contactPageViewModel.availableSalutations = ko.mapping
.fromJS(data.listObject[2]);
....
applyBindings();
HTML:
职衔:
尝试值:$root.contact.saltation而不是值:contactPageViewModel.contact.saltation
或:
职衔:
更新:
你可以看看这个。它可能包含大量多余的代码,您可以简化它,但主要是将初始称呼和选定称呼分开,并添加选项Caption以选择绑定:
var initialSalutation = new salutationViewModel(data.salutation);
以及:
self.salutation = ko.observable();
self.displayedSalutation = ko.computed(function () {
if (self.salutation()) {
return self.salutation();
} else {
return initialSalutation;
}
})
更新2:
看看这个。我已经添加了选项value:'saltationid'来选择绑定,并将Displayedsaltation移动到contactPageViewModel。
我认为问题在于匹配对象选择项目和联系人的问候语。当select的值为SALLATIONID且contact SALLATION也为SALLATIONID number值时,并非所有对象都工作正常。我尝试了这两种方法,结果都是显示第一个“AvailablesAssetation”而不是contact SALLATION。我确实喜欢$root的语法。*但是;看起来更干净,更值得注意的是,当我使用第一个时,我不得不取出,因为它说这不是一个函数。这可能是问题所在吗?当我看小提琴时,它在选择字段中显示了-select敬礼。你知道如何让它在加载时显示夫人吗?@Laurarithey查看更新2。