繁体   English   中英

淘汰赛ObserableArray下拉绑定问题

[英]Knockout ObserableArray dropdown binding issue

我正在尝试从页面加载中的静态wcf服务中获取数据,并绑定至无法正常工作的下拉列表。

        function CreateItem(name, value) {
            var self = this;

            self.itemName = ko.observable(name);
            self.itemValue = ko.observable(value);
        };

        function AppViewModel() {
            var self = this;

            self.titleList = ko.observableArray();

            self.load = function () {
                alert("click fired");
                $.ajax({
                    url: "https://mydomain/RestfulService/Service1.svc/CreateData?name=venkat",
                    type: "POST",
                    cahce: false,
                    async: false,
                    data:'',
                    dataType: "jsonp",
                    success: function (data) {
                        for (var i = 0; i < data.length; i++) {
                            self.titleList().push(new CreateItem(data[i].Description, data[i].TitleID));
                        }
                        alert("success " + data);
                    },
                    error: function (error) {
                        alert("failed " + error);
                    }
                });

            };

        };


    <div>
        <select data-bind="options: titleList(), optionsText: 'itemName', optionsValue: 'itemValue', value: selectedTitleValue, optionsCaption: 'Please choose'"></select>
    </div>

<script type="text/javascript">

    $(document).ready(function() {
        var model = new AppViewModel();
        model.load();

        ko.applyBindings(model);
    });
</script>

问题是,敲除数组正确地在加载函数中填充,但下拉列表却没有刷新更新的数据。 我不明白问题出在哪里。 请输入。

更换:

self.titleList().push(new CreateItem(data[i].Description, data[i].TitleID));

self.titleList.push(new CreateItem(data[i].Description, data[i].TitleID));

原因是self.titleList()返回基础数组 ,当您向其推送数据时,Knockout不知道更改,并且不通知视图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM