选择foreach中的列表而不填充

时间:2013-07-30 14:08:20

标签: knockout.js knockout-2.0

我有一个使用knockout数据绑定选项列表的选择列表。视图加载时没有显示任何内容,但是列表绑定的obervablearray DDABankNums中有数据。

这是我的选择列表 -

                <select id="Select1" style="margin-top: 0px; height: 24px; width: 160px !important"
                    data-bind="value: DDABankNums().LoanNum, optionsText: DDABankNums().AccountName, optionsCaption: 'Select...', optionsValue: DDABankNums().LoanNum">
                </select>

viewmodel代码 -

 define(['services/logger', 'durandal/system', 'durandal/plugins/router', 'services/CertificateDataService'],
function (logger, system, router, CertificateDataService) {
    var allCertificates = ko.observableArray([]);
    var myCertificates = ko.observableArray([]);
    var isSelected = ko.observable();
    var serverSelectedOptionID = ko.observable();
    var filter = ko.observable(0);
    var CertificateDetails = ko.observableArray([]);
    var DDABankNums = ko.observableArray([]);

    var CertificateDetailsToShow = ko.computed(function () {
        GetCertificateDetails();

        return ko.utils.arrayFilter(CertificateDetails(), function (CertD) {
            return CertD.CertificateID == filter();
        });
    });

    var serverOptions = [
    { id: 1, name: 'Certificate', OptionText: 'lwCertID' },
    { id: 2, name: 'Client Name', OptionText: 'clientName' },
    { id: 3, name: 'Client Number', OptionText: 'clientNumber' },
    { id: 4, name: 'Request Date', OptionText: 'requestDate' },
    { id: 5, name: 'Collateral Analyst', OptionText: 'userName' }
    ];

    var activate = function () {
        // go get local data, if we have it
        return SelectAllCerts(), SelectMyCerts(), CertificateDetailsToShow(), GetDDABankNums();

    };


    var vm = {
        activate: activate,
        ResetFilter: ResetFilter,
        filter: ko.observable(),
        allCertificates: allCertificates,
        myCertificates: myCertificates,
        CertificateDetails: CertificateDetails,
        CertificateDetailsToShow: CertificateDetailsToShow,
        DDABankNums: DDABankNums,
        title: 'Certificate Approvals',
        SelectMyCerts: SelectMyCerts,
        SelectAllCerts: SelectAllCerts,
        theOptionId: ko.observable(1),
        serverOptions: serverOptions,
        serverSelectedOptionID: serverSelectedOptionID,
        SortUpDownAllCerts: SortUpDownAllCerts,
        isSelected: isSelected,
        selectThing: function (row, event) {
            filter(row.lwCertID);
            isSelected(row.lwCertID);
        }

    };



    serverSelectedOptionID.subscribe(function () {
        var sortCriteriaID = serverSelectedOptionID();
        allCertificates.sort(function (a, b) {
            var fieldname = serverOptions[sortCriteriaID - 1].OptionText;

            if (a[fieldname] == b[fieldname]) {
                return a[fieldname] > b[fieldname] ? 1 : a[fieldname] < b[fieldname] ? -1 : 0;
            }

            return a[fieldname] > b[fieldname] ? 1 : -1;

        });

    });

    return vm;

    function GetDDABankNums() {
        return CertificateDataService.getDDABankNums(DDABankNums);
    }

    function ResetFilter() {
        filter(0);
        isSelected(false);
    }

    function GetCertificateDetails() {
        return CertificateDataService.getCertDetails(CertificateDetails);
    }

    function SortUpDownAllCerts() {
        allCertificates.sort();
    }


    function SelectAllCerts() {
        return CertificateDataService.getallCertificates(allCertificates);
    }

    function SelectMyCerts() {
        return CertificateDataService.getMyCertificates(myCertificates);
    }


});

为什么列表没有填充?

2 个答案:

答案 0 :(得分:1)

在列表的data-bind属性中,您缺少“options”绑定。您有optionsTest,optionsValue等,但选项(您缺少的选项)实际上是用数据填充选择列表。

答案 1 :(得分:0)

更改敲除绑定
 var allCertificates = ko.observableArray([]);

进入:

 var allCertificates = ko.observableArray();

ko.observableArray()本身是一个数组,无需添加 []

希望这会对你有所帮助。