如何根据knockoutjs中的选择获取值

how to get a value based on a selection in knockoutjs

我正在使用 knockout 从 API 中获取一些数据来填充我的文本框。我想从你select的时候得到API的单价。我怎样才能做到这一点?

<div class="control-group">
    <label class="control-label">Drug:</label>
    <div class="form-horizontal">
        <select id="Drug_ddl" data-bind="options: drugs, optionsText: function (item) { return item.Description; }, value: selectedDrug" class="input-xlarge"></select>
    </div>
</div>


<div class="control-group">
    <label class="control-label">Unit Price:</label>
    <div class="form-horizontal">
        <input type="number" data-bind="value: unitPrice" step="0.01" class="input-xlarge" id="UnitPrice_txt" />
    </div>
</div>

<div class="control-group">
    <label class="control-label">Quantity:</label>
    <div class="form-horizontal">
        <input type="number" data-bind="value: quantity" step="1" class="input-xlarge" id="Qty_txt" />
    </div>
</div>

<div class="control-group">
    <label class="control-label">Cost:</label>
    <div class="form-horizontal">
        <input type="text" data-bind="value: drugcost" readonly="readonly" step="0.01" class="input-xlarge" id="Cost_txt" />
        <input type="button" id="AddDrugs_btn" data-bind="click: addDrug" class="btn btn-primary" value="Add" />

    </div>
</div>

这是视图模型的代码:

var claimEntryViewModel = function () {

    var drugs = ko.observableArray([]);
var unitPrice = ko.observable('0.00');
    var quantity = ko.observable('1');
    var drugcost = ko.computed(function () {
        return quantity() * unitPrice();
    });

 var loadDrugs = function () {
        url = apiServerUrl + "Items/";

        $.ajax({
            url: url,
            headers: { 'Access-Control-Allow-Origin': '*' },
            contentType: 'application/json',
            dataType: 'json',
            type: 'GET',
            crossDomain: true,
            success: function (data) {

                drugs(data);

            },
            error: function (data) {
                console.log("Is not answered");
                console.log(data);
            }
        });
    }

 var selectedDrug = ko.observable();

    var addDrug = function () {

        var match = ko.utils.arrayFirst(claimDrugs(), function (item) {
            return selectedDrug().ID === item.Id;
        });

        if (!match) {
            claimDrugs.push({
                Id: selectedDrug().ID,
                Description: selectedDrug().Description,
                unitPrice: selectedDrug().SalesPrice,
                quantity: quantity(),
                drugcost: drugcost(),
            });
        } else {
            errorMessage("Already exists!");
        }
    }

return {
        drugs: drugs, 
        addDrug: addDrug,
        selectedDrug: selectedDrug,
        unitPrice: unitPrice,
        quantity: quantity,
        drugcost: drugcost,
    }

}

请有人向我提供可以执行此操作的代码,我对淘汰赛还很陌生,真的不知道该怎么做。谢谢

超级酷是对的,订阅是一个很好的处理方式。

    selectedDrug.subscribe(function (newValue) {
                neededInfo(getSelectedDrugInfoFromApi(newValue));
            });

每当 selectedDrug 可观察值发生变化时,这将调用 getSelectedDrugInfoFromApi(),并更新 neededInfo 可观察值。 请记住不要更新订阅函数内的 selectedDrug 值,因为它会创建一个循环。