淘汰赛JS选择框问题
问题描述:
我使用淘汰赛3.4.0我用MooTools的一起项目。我需要存储字段的信息。其中一个信息是通过KO加载的选择框。淘汰赛JS选择框问题
<select data-bind="options: agencyContacts,optionsText: 'name',optionsValue:'id' , optionsCaption: 'Please select...',value:agencyContactSelected">
信息保存在数据库中。从数据库加载相同的信息时,我需要使用相应的数据库条目自动选择选择框。我的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”观察到的被调用两次,首先具有从DB的ID,并且具有未定义值的第二时间。由于这个未定义的值,选择框没有被设置。可能是什么原因?
PS:如果我删除“值:agencyContactSelected”从HTML中,认购正确调用即与DB值一次。
答
我看到你的问题几个令人惊奇的元素:
- 为何使用
optionsValue
?这似乎并不在这里 - 有用在你
draw
功能,你叫agencyContactViewModel.agencyContactSelected
,但agencyContactViewModel
是一个函数。对于功能和您的视图模型的财产都使用相同的名称是相当棘手,你应该避免 - 我没有看到你的
vm
变量
当'agencyId'变化,你清楚的定义所有'agencyContacts'。这将重新评估'选项'绑定,删除其中的所有'选项'。仍然有一个选定的ID,但淘汰赛将无法找到相应的值。这将导致设置一个未定义的值。之后,当(异步)项目重新出现时,它将失去其选择状态并且无法检索它。 – user3297291
@ user3297291即使我删除了agencyContacts更新的agencyId订阅功能,agencyContactSelected订阅功能仍被调用两次。 – Vivek