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

时间:2014-09-01 05:18:35

标签: knockout.js

挂钩以更改下拉列表事件的订阅事件仅触发一次!! 每次审计下拉列表项目发生更改时,如何触发它?

JSFiddle代码是http://jsfiddle.net/ky3mkb3q/2/

HTML:

<div class="container">
     <h1>Load NVDs</h1>

    <hr />
    <div style="margin-top:40px; margin-bottom:40px">
        <div style="margin-bottom:20px"> <span>Audit: </span>

            <select data-bind="options: $root.availableAudits, optionsValue: 'auditId', optionsText: 'auditName', value: selectedAudit" />
        </div>
    </div>
</div>

脚本:

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

1 个答案:

答案 0 :(得分:0)

找到答案: data-bind指向auditId而不是id

相关问题