knockout js - 如何在下拉列表中进行条件绑定

时间:2012-02-06 11:32:05

标签: asp.net-mvc-3 knockout.js

我有一个从各种Mvc操作填充的Knockout视图模型。

  1. 从第一个下拉菜单中选择一个类别(比如水果,肉类,饮料等)。

  2. 第一个选项会自动填充第二个下拉列表。然而,水果可能有2场比赛(比如苹果,橘子),肉类可以有2场(比如牛肉,羊肉)和许多饮料(几百种)。

  3. 我的页面当前显示的搜索框取决于所选的类别。

  4. 我想知道如何自动绑定Fruit&的第二个下拉列表。肉,或等待并从搜索查询的结果中进行绑定。

    对不起,这是模糊的 - 抽搐的客户!对KnockoutJs来说很新。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您可以在viewmodel中创建一个绑定到下拉列表更改事件的方法。

示例方法:

var myViewModel = {
    firstDropDownArray: ko.observableArray([]),
    secondDropDownArray: ko.observableArray([]),

    // Validates Selection
    validateSelection: function (item) {
        var anotherList;

        switch (item.toUpperCase()) {
            case "FRUIT":
                // Do something...
                break;
            case "DRINKS":
                // Do something else...
                break;
            default:
        }
    }
};

您的Dropdown可以绑定到这样的方法:

<select id="FirstDropDown" data-bind="options: myViewModel.firstDropDownArray, <any other binding options>, event: {change: myViewModel.validateSelection(currentItem)}">
</select>

如上所述:event-binding

  

在调用处理程序时,Knockout将提供当前模型   value作为第一个参数。

我假设这意味着当您调用方法时currentItem将成为所选项。 我知道在我的示例代码中我编写了item.toUpperCase(),但这只是假设项目是作为字符串传递的。这个语法显然必须根据您声明和填充下拉列表的方式进行更改,但实际上您仍然应该能够在viewmodel中编写一个方法,然后绑定到change事件,..或任何其他您喜欢的事件。< / p>