1

これはビューモデルです

 self.choiceSelect = ko.observable();
            self.selectedItems = ko.observableArray([]);
            self.selectedComponent = ko.observable();
            self.componentList = ko.observableArray();

 self.GetData = function () {

            $.ajax({
                url: self.url + "GetComponent",
                type: "GET",
                cache: false
            })
            .fail(function (qxhr, status, errorThrown) {

            })
            .done(function (data) {

                self.componentList(data);

            });

        };

これはコードです:

<select id="report-Components" data-bind="value: selectedComponent, options: componentList, optionsText: 'componentName'"></select><br /><br />
<h4>Component Attributes</h4>
<!-- ko if: selectedComponent  -->
<!-- ko if: selectedComponent().componentField  -->
<div data-bind="foreach: selectedComponent().componentField">
    <div class="control-group">
        <div class="controls">
            <input type="checkbox" data-bind="checked: $parent.selectedItems, value: $data" />
        </div>
        <label class="control-label">
            <strong data-bind="text: fieldText"></strong>
        </label>
    </div>                                    
</div>
<!-- /ko -->                            
<!-- /ko -->
<!-- ko if: selectedItems  -->
<div data-bind="foreach: selectedItems">
    <!-- ko if: fieldChoice.length > 0  -->
    <label data-bind="text: fieldText"></label>
    <select data-bind="options: fieldChoice, optionsText: 'choiceName', value: $data.choiceSelect"></select>
    <!-- /ko -->
    <!-- ko if: fieldChoice.length == 0  -->
    <label data-bind="text: fieldText"></label>
    <input type="text" value=""/>
    <!-- /ko -->
</div>  
<!-- /ko -->  
4

1 に答える 1

4

選択値をオブザーバブルにバインドする必要があります。

<select data-bind="options: fieldChoice, optionsText: 'choiceName', value: $data.nameOfObservable">

これにより、選択が変更されたときに nameOfObservable が更新されます。

このオブザーバブルは、見ている配列内の各アイテムにある必要があります。そのため、selectedItems に格納するオブジェクトが何であれ、同じ名前の監視可能なプロパティが必要です。

ビュー モデル内のすべてを監視可能にするには、マッピング プラグインを使用することをお勧めします。

self.componentList = ko.mapping.fromJS(data);

ビューモデルの他のプロパティについても同じことを行います。

于 2013-03-05T15:32:56.003 に答える