3

プロジェクトでJSONとブートストラップコントロールを使用しています。JSONで、からデータを取得しますsql database。ここで、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>

これは私が私の選択を投入しようとしているところです、これは私のtdの中にあります

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

2 に答える 2

6

optionsText バインディングの選択オプションを使用すると、プロパティ名を文字列として指定する必要があるため、書き込む必要があります'ProjectName'(一重引用符に注意してください)。

ただし、valueバインディングにはプロパティ自体が必要なので、記述する必要がありますProjectName(引用符がないことに注意してください)。

したがって、固定バインディングは次のようになります。

<div data-bind="foreach: Projects">
    <select data-bind="options: $root.MappedProjects, 
                       optionsText: 'ProjectName', value: ProjectName">
    </select>
</div>
于 2013-01-19T12:34:51.180 に答える
1

セレクトにノックアウトを追加する簡単な方法を見つけました。

HTML:

<div class="bar">
    Select Query:
    <select id="QueryName" data-bind="options: Data, optionsText: 'QueryName', value: QueryName, event: { 'change': vm.LoadQuery }">
    </select>
</div>

以下を追加することにより、変更時にデータをロードするイベントを追加できます。event: { 'change': vm.LoadQuery }

ノックアウト:

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' });
            }
        })
    }
于 2013-08-12T08:18:16.863 に答える