Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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 选项绑定覆盖初始视图模型值_Javascript_Jquery_Ajax_Knockout.js - Fatal编程技术网

Javascript 选项绑定覆盖初始视图模型值

Javascript 选项绑定覆盖初始视图模型值,javascript,jquery,ajax,knockout.js,Javascript,Jquery,Ajax,Knockout.js,我试着遵循关于堆栈溢出的其他类似问题,但到目前为止都没有成功地解决这个问题 我正在使用jQueryAjax检索几个项目:联系人及其相关信息、所有可用的称呼类型、所有可用的电子邮件类型和所有可用的电话类型 我已成功地将选项绑定到选择框。但是,它似乎覆盖了保存初始视图模型值的“值”绑定 你们谁能帮我解决这个问题?如果您有任何问题需要澄清,请告诉我 请参阅下面的代码: 视图模型: function contactPageViewModel() { var self = this; s

我试着遵循关于堆栈溢出的其他类似问题,但到目前为止都没有成功地解决这个问题

我正在使用jQueryAjax检索几个项目:联系人及其相关信息、所有可用的称呼类型、所有可用的电子邮件类型和所有可用的电话类型

我已成功地将选项绑定到选择框。但是,它似乎覆盖了保存初始视图模型值的“值”绑定

你们谁能帮我解决这个问题?如果您有任何问题需要澄清,请告诉我

请参阅下面的代码:

视图模型:

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。