0

我试图在select淘汰选项绑定的帮助下从服务器列出标签的选项。我有一个 PHP 页面,它返回 JSON 数据,该数据被推送到绑定到 select 标签的淘汰赛可观察数组。但不知何故它不起作用,请参考以下代码以供参考:

HTML:

<div class="form-group">
    <select class="form-control">
        <option data-bind="options: Country_Names, optionsText: 'country_name'"></option>
    </select>
</div>

JavaScript:

$(document).ready(function(){
    function appModel(session_info){
        /* Session Info related bindings are commented as they are working fine */
        var self = this;
        this.Country_Names = ko.observableArray();

        // Bindings related to the batch processing
        $(function(){
            $.ajax({
                url:"../api/master_list.php",
                type:"get",
                data:{mastertype: '1'},
                cache:false,
                success:function(country_list){
                    ko.mapping.fromJSON(country_list, {}, self.Country_Names);
                }
            });
        });
    };

    $.ajax({
        url:"../api/sessions.php",
        type:"get",
        data: {rqtype: '1'},
        cache:false,
        success:function(session_info){
            var data = $.parseJSON(session_info);
            if (data.status == 'Invalid_id'){
                window.location.replace('../files/main.html');
            } else {
                ko.applyBindings(new appModel(session_info));
            }
        }
    });    
});

示例 JSON:

[{"country_name":"Albania"},{"country_name":"Chile"},{"country_name":"Cuba"}]

问题,为什么选择标签中没有列出选项?我错过了一些明显的东西吗?

4

1 回答 1

0

您正在对option元素进行数据绑定,而您想将绑定放在 上select,如下所示:

<select class="form-control" data-bind="options: Country_Names, optionsText: 'country_name'">
</select>

<option...>元素消失了;选项将由 Knockout 生成。

请注意,相关文档非常清楚这一切是如何工作的。如果您还没有,我建议(重新)阅读它。

或者,查看这个完整的演示:

var data = [{"country_name":"Albania"},{"country_name":"Chile"},{"country_name":"Cuba"}];

ko.applyBindings({ Country_Names: data });
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<select data-bind="options: Country_Names, optionsText: 'country_name'"></select>

于 2013-08-07T18:50:20.667 回答