【问题标题】:Creating parent/child drop down lists using complex json object and knockout bindings使用复杂的 json 对象和剔除绑定创建父/子下拉列表
【发布时间】:2012-04-18 02:37:27
【问题描述】:

我有一个 json 对象,其中包含站点和站点的客户端。一个站点 可以有很多客户。

我知道如何使用 淘汰赛绑定。但是,我无法弄清楚如何填充 当 onchange 发生在父级时,客户端下拉列表(子级) 下拉列表。

如果有更多经验的人可以改变我的 下面的代码向我展示如何实现主/子下拉列表 功能。

干杯

C

    var posterArray = ([
                           { SiteId: 1,
                             SiteName: "Mail",
                             ClientSite:[
                                { ClientId: 1, ClientName: "Mail Client A" }, { ClientId: 1, ClientName: "Mail Client B"}]  
                           },

                           { SiteId: 2,
                             SiteName: "DSAC",
                             ClientSite:
                                { ClientId: 1, ClientName: "DSAC Client A" }
                           }
    ]);


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

        // Poster
        self.PosterList = ko.mapping.fromJS([]);
        self.PosterListEnable = false;

        self.refreshPosterList = function () {
            var data = [];
            if (posterArray.length == 0) {
                data = [{ SiteId: 'No Posters', SiteName: 'No Posters'}];
            } else if (posterArray.length == 1) {
                data = posterArray;
            } else {
                data = [{ SiteId: 'Select a Poster', SiteName: 'Select a Poster'}];
                data.push.apply(data, posterArray);
            }

            ko.mapping.fromJS(data, null, self.PosterList);
            self.refreshClientList();
        };


        //Client
        self.ClientList = ko.mapping.fromJS([]);
        self.refreshClientList = function () {

        };

    };

    var viewModel = new ViewModel();

    $(function () {

        ko.applyBindings(viewModel);
        viewModel.refreshPosterList();
    });

</script>
<fieldset class="SearchFilter">
    <legend>Search Filter</legend>
    <div class="SearchItem">
        <span>Poster:</span>
        <select id="dllPoster" data-bind="foreach: PosterList, disable:PosterList().length <= 1" onchange="viewModel.refreshClientList();">
            <option data-bind="text: SiteName, attr:{value:SiteId}"></option>
        </select>
        <select id="ddlClient" data-bind="with: PosterList.ClientSite ">
            <option data-bind="text: ClientName, attr:{value:ClientId}"></option>
        </select>
    </div>
</fieldset>

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    Knockout 对下拉列表有特定的绑定。看看“选项”绑定:http://knockoutjs.com/documentation/options-binding.html

    这是您示例的 jsFiddle:http://jsfiddle.net/9QVw9/

    【讨论】:

    • 您好,谢谢您的回复和帮助。我会阅读您建议的帖子并查看 jsFiddle。
    • 嗨,ckal,您能向我解释一下 value: selectedPoster 绑定是如何工作的吗?您没有为它分配任何价值。您在哪里将其设置为选择中的选定值? '
    • 嗨,我正在尝试为子选择添加逻辑到我的 optionsCaption 但它不起作用
    • 如何将对象的id添加到options的value属性中?
    猜你喜欢
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2014-01-17
    相关资源
    最近更新 更多