Knockout.js 淘汰JS选择框问题
我正在为我的项目使用淘汰3.4.0以及MooTools。我需要存储字段的信息。其中一个信息是通过KO加载的选择框Knockout.js 淘汰JS选择框问题,knockout.js,mootools,knockout-3.0,Knockout.js,Mootools,Knockout 3.0,我正在为我的项目使用淘汰3.4.0以及MooTools。我需要存储字段的信息。其中一个信息是通过KO加载的选择框 <select data-bind="options: agencyContacts,optionsText: 'name',optionsValue:'id' , optionsCaption: 'Please select...',value:agencyContactSelected"> 信息保存在数据库中。当从DB加载相同的信息时,我需要使用相应的DB条目自动选
<select data-bind="options: agencyContacts,optionsText: 'name',optionsValue:'id' , optionsCaption: 'Please select...',value:agencyContactSelected">
信息保存在数据库中。当从DB加载相同的信息时,我需要使用相应的DB条目自动选择选择框。我的ViewModel如下所示
var vm={};
var Information = {
Implements: [Options, Events],
/**
* Method: initialize
*
* Parameters:
* options (object) - the options object
*/
initialize: function(options) {
var self = this;
self.draw();
},
draw: function() {
vm.agencyContactViewModel.agencyContactSelected(<ID>);
}
}
var agencyContactViewModel = function() {
var self = this;
self.agencyId = ko.observable();
self.agencyContacts = ko.observableArray();
self.agencyContactSelected = ko.observable();
self.agencyContactSelected.subscribe(function(newAgencyContactSelected) {
alert(newAgencyContactSelected);
});
self.agencyId.subscribe(function(newAgencyId) {
self.agencyContacts.removeAll();
self.address();
var submitObj = {
'contactId': newAgencyId
};
var myRequest = new ReqJSON({
'url': '/gateway?file=contacts.views&method=getContactRefs',
onSuccess: function(responseJSON) {
if (responseJSON.length > 0) {
var length = responseJSON.length;
for (var i = 0; i < length; i++) {
self.agencyContacts.push(responseJSON[i]);
}
}
}
}).send(JSON.encode(submitObj));
});
}
myInformation = new Information();
window.addEvent('domready', function() {
vm.agencyContactViewModel = new agencyContactViewModel();
ko.applyBindings(vm.agencyContactViewModel, document.getElementById('agency_contact_wrapper'));
});
虽然我已经为选择框设置了正确的ID,但是“agencyContactSelected”observable的相应subscribe函数被调用了两次,第一次使用DB的ID,第二次使用未定义的值。由于此未定义的值,未设置选择框。原因可能是什么
PS:如果我从HTML中删除'value:agencyContactSelected',订阅将被正确调用,即使用DB值调用一次 我在你的问题中看到了几个令人惊讶的因素: 为什么使用OptionValue?它在这里似乎没有用 在draw函数中,调用agencyContactViewModel.agencyContactSelected,但agencyContactViewModel是一个函数。为viewmodel的函数和属性使用相同的名称是非常棘手的,应该避免使用 我看不到vm变量的定义
当agencyId更改时,将清除所有agencyContacts。这将重新评估选项绑定,删除其中的所有选项。仍有选定的ID,但knockout将无法找到相应的值。这将导致设置未定义的值。稍后,当项目异步重新出现时,它将丢失其选择状态,并且无法检索。@user3297291即使我删除了更新agencyContacts的agencyId订阅函数,agencyContactSelected subscribe函数仍被调用了两次。1我的印象是,选项值中指定的任何内容都将在agencyContactSelected值属性中设置2我错过了3编辑的任何改进?另外,由于信息不是一个函数,我很想知道这段代码的作用:myInformation=新信息;仍然没有改进。信息是基于工具的类。在调用新信息时,它将调用信息类中的initialize方法。