用Json数据填充引导选择并删除JS视图模型

用Json数据填充引导选择并删除JS视图模型,json,knockout.js,Json,Knockout.js,我在项目中使用JSON和引导控件。在我的JSON中,我从我的sql数据库中检索数据。现在我想用我的数据填充select控件,但它不起作用,我看不出我做错了什么,我已经搜索了很多小提琴使其工作 这是我的JSON:: var Projectss = function (data) { var self = this; self.ProjectName = ko.observable(data.ProjectName); } var Proje

我在项目中使用JSON和引导控件。在我的JSON中,我从我的
sql数据库中检索数据。现在我想用我的数据填充select控件,但它不起作用,我看不出我做错了什么,我已经搜索了很多小提琴使其工作

这是我的JSON::

    var Projectss = function (data) {
        var self = this;
        self.ProjectName = ko.observable(data.ProjectName);
    }

    var ProjectModel = function (Projects) {
        var self = this;
        self.Projects = ko.observableArray(Projects);

    $.ajax({
            url: "CreateTask.aspx/GetProjectList",
            // Current Page, Method  
            data: '{}',
            // parameter map as JSON  
            type: "POST",
            // data has to be POSTed  
            contentType: "application/json; charset=utf-8",
            // posting JSON content      
            dataType: "JSON",
            // type of data is JSON (must be upper case!)  
            timeout: 10000,
            // AJAX timeout  
            success: function (Result) {
                var MappedProjects =
              $.map(Result.d,
       function (item) { return new Projectss(item); });
                self.Projects(MappedProjects);
            },
            error: function (xhr, status) {
                alert(status + " - " + xhr.responseText);
            }

        });
    };

    $(document).ready(function () {
        var VM = new ProjectModel();
        ko.applyBindings(VM);
    })

</script>


使用
选项text
时,需要将属性名称指定为字符串,因此需要编写
“ProjectName”
(请注意单引号)

但是,需要属性本身,因此需要编写
ProjectName
(注意没有引号)

因此,固定绑定如下所示:

<div data-bind="foreach: Projects">
    <select data-bind="options: $root.MappedProjects, 
                       optionsText: 'ProjectName', value: ProjectName">
    </select>
</div>

我找到了一种更简单的方法,用敲除填充select:

HTML:


我已经像告诉你的那样把装订好了,但不起作用。我已经用Json数据创建了一个JSFIDLE,但它仍然不起作用。如果需要,你能帮我吗possible@G-老兄,我把你的小提琴修好了。但是你的绑定有很多错误。您有
“选项:$root.items选项text:items.ProjectName”
。如果正确的绑定是
“options:$root.items,options:'ProjectName'”
缺少逗号,并且绑定区分大小写。而且你的映射插件的使用是完全错误的。我强烈建议您阅读文档和一些关于一般敲除和ko映射插件的示例。顺便说一句,你的问题中的手动映射代码更容易理解和理解。非常感谢你的帮助,非常感谢。
<div data-bind="foreach: Projects">
    <select data-bind="options: $root.MappedProjects, 
                       optionsText: 'ProjectName', value: ProjectName">
    </select>
</div>
<div class="bar">
    Select Query:
    <select id="QueryName" data-bind="options: Data, optionsText: 'QueryName', value: QueryName, event: { 'change': vm.LoadQuery }">
    </select>
</div>
vm = {
        Data: ko.observableArray(),
     }

    function LoadQueries() {
        $.ajax({
            type: "POST",
            url: "ExportCustomQueriesList.aspx/GetQueries",
            contentType: "application/json",

            success: function (response) {
                vm.Data(ko.utils.unwrapObservable(ko.mapping.fromJS(response.d)));
                ko.applyBindings(vm);

                //var n = noty({ text: 'Query in progress of execution', theme: 'default', layout: 'center', timeout: 2000, type: 'error' });
            }
        })
    }