使用knockout.js下拉列表,订阅事件只触发一次

使用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

与下拉列表的更改事件挂钩的订阅事件只触发一次!! 如何在每次更改Audit dropdownlist项时启动它

JSFIDLE代码是

Html:

脚本:

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而不是id

good 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);
}