首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用淘汰法将数据从数据库加载到DropDownList

利用淘汰法将数据从数据库加载到DropDownList
EN

Stack Overflow用户
提问于 2014-11-19 08:02:12
回答 1查看 1.3K关注 0票数 0

我正在创建一个使用敲除来编辑可变长度列表。当我单击Add时,它将向屏幕添加一个DropDownList和一个TextBox。我已经成功地将数据从数据库加载到DropDownList,但每次单击Add时,它都会填充数据。

代码:

代码语言:javascript
复制
<div class="form-horizontal" data-bind="with: purchaseOrder">
    <h4>Purchase Order</h4>
    <hr />

    <div class="form-group">
        <label class="control-label col-md-2" for="PurchaseOrderDate">PO Date</label>
        <div class="col-md-10">
            <input class="form-control" data-bind="value: PurchaseOrderDate" placeholder="Purchase Order Date" />
        </div>
    </div>

    <div class="form-group">
        <label class="control-label col-md-2" for="InvoiceNo">Invoice No</label>
        <div class="col-md-10">
            <input class="form-control" data-bind="value: InvoiceNo" placeholder="Invoice No" />
        </div>
    </div>

    <div class="form-group">
        <label class="control-label col-md-2" for="Memo">Memo</label>
        <div class="col-md-10">
            <input class="form-control" data-bind="value: Memo" placeholder="Enter Memo" />
        </div>
    </div>
</div>

<h4>Details</h4>
<hr />

<table class="table">
    <thead>
        <tr>
            <th>Item Name</th>
            <th>Qty Order</th>
            <th></th>
        </tr>
    </thead>
    <tbody data-bind="foreach: purchaseOrderDetails">
        <tr>
            <td>
                <select class="form-control" data-bind="options: AX_INVENTSUMs, optionsText: 'ITEMNAME', optionValue: 'ITEMID'"></select>
            </td>
            <td>
                <input class="form-control" data-bind="value: QuantityOrder" placeholder="Enter Quantity Order">
            </td>
            <td>
                <a class="btn btn-sm btn-danger" href='#' data-bind=' click: $parent.removeItem'>X</a>
            </td>
        </tr>
    </tbody>
</table>

<p>
    <button class="btn btn-sm btn-primary" data-bind='click: addItem'>Add Item</button>
</p>

@section Scripts {
    @Scripts.Render("~/bundles/knockout")
    <script>
        $(function () {
            var PurchaseOrder = function (purchaseOrder) {
                var self = this;

                self.PurchaseOrderID = ko.observable(purchaseOrder ? purchaseOrder.PurchaseOrderID : 0);
                self.PurchaseOrderDate = ko.observable(purchaseOrder ? purchaseOrder.PurchaseOrderDate : '');
                self.InvoiceNo = ko.observable(purchaseOrder ? purchaseOrder.InvoiceNo : '');
                self.Memo = ko.observable(purchaseOrder ? purchaseOrder.Memo : '');
            };

            var PurchaseOrderDetail = function (purchaseOrderDetail, items) {
                var self = this;

                self.PurchaseOrderDetailID = ko.observable(purchaseOrderDetail ? purchaseOrderDetail.PurchaseOrderDetailID : 0);
                self.PurchaseOrderID = ko.observable(purchaseOrderDetail ? purchaseOrderDetail.PurchaseOrderDetailID : 0);
                self.ItemID = ko.observable(purchaseOrderDetail ? purchaseOrderDetail.ItemID : 0);
                self.QuantityOrder = ko.observable(purchaseOrderDetail ? purchaseOrderDetail.QuantityOrder : 0);
                self.QuantityBonus = ko.observable(purchaseOrderDetail ? purchaseOrderDetail.QuantityBonus : 0);

                self.AX_INVENTSUMs = ko.observableArray(items);
            };

            var PurchaseOrderCollection = function () {
                var self = this;

                self.purchaseOrder = ko.observable(new PurchaseOrder());
                self.purchaseOrderDetails = ko.observableArray([new PurchaseOrderDetail()]);

                self.CashedArray = ko.observableArray([]);
                $.getJSON("/AX_INVENTSUM/GetAX_INVENTSUMs", null, function (data) {
                    var array = [];
                    $.each(data, function (index, value) {
                        array.push(value);
                    });
                    self.CashedArray(array);
                });

                self.addItem = function () {
                    self.purchaseOrderDetails.push(new PurchaseOrderDetail(null, self.CashedArray));
                };

                self.removeItem = function (purchaseOrderDetail) {
                    self.purchaseOrderDetails.remove(purchaseOrderDetail);
                };
            };

            ko.applyBindings(new PurchaseOrderCollection());
        });
    </script>
}

正如您在上面的代码中所看到的,如何使这种情况每次只发生一次?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-19 08:25:51

您必须在某个地方缓存您的列表。我更喜欢在类似于父视图模型的情况下这样做。见波洛。

代码语言:javascript
复制
var OrderList = function(){
    var self = this;
    ...
    self.CashedArray = ko.observableArray(new Array());
    $.getJSON("/AX_INVENTSUM/GetAX_INVENTSUMs", null, function (data) {
        var array = [];
        $.each(data, function (index, value) {
            array.push(value);
        });
        self.CashedArray(array);
    });
    self.AddButtonClick = function (){
       var orderDetails = new PurchaseOrderDetail(self.CashedArray());
    };
};

var PurchaseOrderDetail = function (items) {
    var self = this;
    ...
    self.AX_INVENTSUMs = ko.observableArray(items);
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27011752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档