【问题标题】:knockout dropdown selection change淘汰赛下拉选择更改
【发布时间】:2013-04-10 09:16:20
【问题描述】:

嗨,朋友们,我正在尝试在 mvc 中的一个网页上使用 knockoutjs 剃刀。从以下 ViewModel 我正在实现“添加更多” 功能。但我的问题是我们如何实现以下 功能:

(1) 当下拉列表为 “烟草类型”选择为“选择...”

(2)当我们选择其他值(除了“Choose”)时 下拉列表应填充包含值 1 到 10....

(3) 当我们选择“Others”而不是下拉一个文本框应该 出现

这是我的尝试:

<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>

【问题讨论】:

    标签: drop-down-menu knockout.js razor-2


    【解决方案1】:

    我很难猜出你想要达到的目标。但我认为你在淘汰赛中寻找visible binding

    可见绑定会导致关联的 DOM 元素根据您传递给绑定的值变为隐藏或可见。

    第二个想法应该是optionsCaption 属于options binding

    如果您将 optionsCaption 与选项绑定一起使用,则 ko 将在选择列表中添加一个额外的选项,默认情况下将选择该选项并包含未定义的值。

    通过使用这两者,我已经根据您的要求创建了一个小提琴。检查这个:

    Demo fiddle

    希望这就是你要找的东西!

    【讨论】:

    • 答案不是重点,但我得到了提示......并且它正在工作......谢谢好友......
    猜你喜欢
    • 2015-11-05
    • 2015-05-06
    • 1970-01-01
    • 2014-06-26
    • 2023-03-08
    • 1970-01-01
    • 2016-11-23
    • 2015-06-11
    • 1970-01-01
    相关资源
    最近更新 更多