0

こんにちは、mvc razor の Web ページの 1 つで knockoutjs を使用しようとしています。次のViewModelから、「ADD MORE」機能を実現していますが、私の問題は、次の機能をどのように実現できるかということです:

(1) [タバコの種類] のドロップダウンが [選択] に選択されている場合、2 番目のドロップダウンは非表示にする必要があります。

(2) 他の値 (「Choose」以外) を選択すると、1 から 10 の値を含む 2 番目のドロップダウンが入力されます。

(3)ドロップダウンの代わりに「その他」を選択すると、テキストボックスが表示されます

ここに私の試みがあります:

<script src="@Url.Content("~/Scripts/jquery-1.7.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/knockout-2.1.0.js")" type="text/javascript"></script>

<script type="text/html" id="ddlSelection">
<div><select></select> yrs.</div>
<div><input type="text" data-bind=""></input></div>
</script>

<div id="container">
  @*<div data-bind="template:{name:'smoker'}"></div>*@
  <table cellpadding="3" cellspacing="4">
    <tbody data-bind="foreach: seats">
        <tr>
            <td>
                Type of Tobacco/Nicotine consumed :
            </td>
            <td>
                <select data-bind="options: $root.availabledrugs, value: Drug, optionsText: 'DrugName'"></select> 
            </td>
            <td><select></select></td>
        </tr>
        <tr>
            <td>
                Quantity : <input data-bind="value: Name" /> 
            </td>
            <td>
                Frequency : <select data-bind="options: $root.availablefrequency, value: Frequency, optionsText: 'frequency'"></select>
            </td>
            <td data-bind="text: FormatPrice"></td>
        </tr>
    </tbody>
</table>
<button data-bind="click:AddConsumption">Add New One</button>
</div> 


<script type="text/javascript">
    function setconsumption(name, initdrug,initfrequency) {
        var self = this;
        self.Name = name;
        self.Drug = ko.observable(initdrug);
        self.Frequency = ko.observable(initfrequency);
        self.FormatPrice = ko.computed(function () {
            return self.Drug().Price ? "$" + self.Drug().Price.toFixed(2) : "none";
        });
    }

    function ConsumptionViewModel() {
        var self = this;
        self.availabledrugs = [{ "DrugName": "Choose...", "Price": 0 },
                               { "DrugName": "Cigarettes", "Price": 10 },
                               { "DrugName": "Cigar", "Price": 20 },
                               { "DrugName": "Others", "Price": 30}];

        self.availablefrequency = [{ "frequency": "Choose..." }, { "frequency": "freq1" }, { "frequency": "freq2"}];

        self.seats = ko.observableArray(
                                        [new setconsumption("", self.availabledrugs[0], self.availablefrequency[0])]);

        self.AddConsumption = function () {
            self.seats.push(new setconsumption("", self.availabledrugs[0], self.availablefrequency[0]));
        };
    }

    ko.applyBindings(new ConsumptionViewModel());
</script>
4

1 に答える 1

1

あなたが達成しようとしていることを推測するのは難しいです。しかし、ノックアウトで目に見えるバインディングを探していると思います。

可視バインディングは、バインディングに渡す値に応じて、関連する DOM 要素を非表示または可視にします。

そして 2 番目に考える必要があるのは、 options bindingoptionsCaptionの下にあることです。

オプション バインディングで optionsCaption を使用すると、ko は選択リストに追加のオプションを追加します。これはデフォルトで選択され、未定義の値が含まれます。

この両方を使用して、要件に応じてフィドルを作成しました。これをチェックして:

デモフィドル

これがあなたが探しているものであることを願っています!

于 2013-04-10T10:51:30.870 に答える