使用knockout.js下拉列表,订阅事件只触发一次
与下拉列表的更改事件挂钩的订阅事件只触发一次!! 如何在每次更改Audit dropdownlist项时启动它 JSFIDLE代码是 Html: 脚本:使用knockout.js下拉列表,订阅事件只触发一次,knockout.js,Knockout.js,与下拉列表的更改事件挂钩的订阅事件只触发一次!! 如何在每次更改Audit dropdownlist项时启动它 JSFIDLE代码是 Html: 脚本: function NVDEntriesViewModel(callback) { var self = this; self.nvdEntries = ko.observableArray([]); self.availableAudits = []; var auditYear = self.auditYe
function NVDEntriesViewModel(callback) {
var self = this;
self.nvdEntries = ko.observableArray([]);
self.availableAudits = [];
var auditYear = self.auditYear;
// Get available audits
var audits = GetAudits(auditYear, function (audits) {
self.availableAudits.push({
id: 0,
auditName: '<Select Audit>'
});
for (var i = 0; i < audits.length; i++) {
var audit = {};
audit.id = audits[i].id;
audit.auditName = audits[i].Title;
self.availableAudits.push(audit);
}
// Set selected audit
self.selectedAudit = ko.observable(0);
self.selectedAudit.subscribe(function (newValue) {
if (newValue === 0 || newValue === undefined) {
alert('value 0 selected');
} else {
alert('other value selected');
}
});
});
}
ko.applyBindings(new NVDEntriesViewModel());
/* ----------------------------------------------------------
Get Audits
----------------------------------------------------------*/
function GetAudits(auditYear, callback) {
var result = [{
Title: 'Audit 1',
year: 2014,
id: 1
}, {
Title: 'Audit 2',
year: 2014,
id: 2
}];
callback(result);
}
找到了答案:
数据绑定指向auditd而不是idgood to know。你现在确定订阅正在工作。我以前尝试过更改id,但订阅仍然是一样的。
function NVDEntriesViewModel(callback) {
var self = this;
self.nvdEntries = ko.observableArray([]);
self.availableAudits = [];
var auditYear = self.auditYear;
// Get available audits
var audits = GetAudits(auditYear, function (audits) {
self.availableAudits.push({
id: 0,
auditName: '<Select Audit>'
});
for (var i = 0; i < audits.length; i++) {
var audit = {};
audit.id = audits[i].id;
audit.auditName = audits[i].Title;
self.availableAudits.push(audit);
}
// Set selected audit
self.selectedAudit = ko.observable(0);
self.selectedAudit.subscribe(function (newValue) {
if (newValue === 0 || newValue === undefined) {
alert('value 0 selected');
} else {
alert('other value selected');
}
});
});
}
ko.applyBindings(new NVDEntriesViewModel());
/* ----------------------------------------------------------
Get Audits
----------------------------------------------------------*/
function GetAudits(auditYear, callback) {
var result = [{
Title: 'Audit 1',
year: 2014,
id: 1
}, {
Title: 'Audit 2',
year: 2014,
id: 2
}];
callback(result);
}