2

eventschemas からのデータは、ブラウザーで表示できますが、バインドされていません。これは、下部にある $data 値で確認できます。これは、問題とスキーマの最小限の再現であることに注意してください。変えられない..

私のhtml

<div data-bind="with: g">

    <div><input type="text" class="form-control" data-bind="value: gname" /></div>

         <div>
              <table>

                  <tbody>
                     <tr data-bind="with:gdetails">
                        <td>
                           <select data-bind="options: eventschemas, optionsText: 'schema', value:eventschemacondition.schema"></select>

                         </td>

                    </tr>
                   </tbody>
               </table>
           <pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
        </div>                
 </div> 

私のJavaScript:

 <script type="text/javascript">
        var eventschemas = [{ "schema": "Test"}, { "schema": "Another Test" }];

        var AppScope = function () {
             function EventSchemaCondition(data) {
                this.schema = ko.observable(data.schema);
                };
            function Gdetails(data) {
                this.eventschemacondition = ko.observable(data.eventschemacondition);
            };
            function G(data) {
                this.gname = ko.observable(data.gname);
                this.gdetails = ko.observable(data.gdetails);
            };
                function GsViewModel() {
                    var self = this;
                   self.g = ko.observable(new G({ gname: "", gdetails: new Gdetails({ eventschemacondition:new EventSchemaCondition({ schema: "" }) }) }));

                }
                ko.applyBindings(new GsViewModel());
          }();
    </script>

これは私の $data がどのように見えるかです:

{
  "gname": "tttt",
  "gdetails": {
    "eventschemacondition": {
      "schema": ""
    }
  }
}

ご覧のとおり、ブラウザのドロップダウンリストボックスに値が表示されていても、「eventschemacondition」の「schema」は空です。

どんな助けでも心から感謝します

ありがとう

4

1 に答える 1

2

次のバインディングで呼び出す必要がありeventschemacondition().schemaます。valueselect

var eventschemas = [{ "schema": "Test"}, { "schema": "Another Test" }];

var AppScope = function () {
    function EventSchemaCondition(data) {
        this.schema = ko.observable(data.schema);
    }
    
    function Gdetails(data) {
        this.eventschemacondition = ko.observable(data.eventschemacondition);
    }
    
    function G(data) {
        this.gname = ko.observable(data.gname);
        this.gdetails = ko.observable(data.gdetails);
    }
    
    function GsViewModel() {
        var self = this;
        self.g = ko.observable(
        new G({ 
           gname: "", 
           gdetails: new Gdetails({ eventschemacondition:new EventSchemaCondition({ schema: "" })})
       }));
    }
    
    ko.applyBindings(new GsViewModel());
  }();
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<div data-bind="with: g">
    <div><input type="text" class="form-control" data-bind="value: gname" /></div>
        <div>
            <table>
                <tbody>
                    <tr data-bind="with:gdetails">
                        <td>
                            <select data-bind="options: eventschemas, optionsText: 'schema', value:eventschemacondition().schema"></select>
                        </td>
                    </tr>
                   </tbody>
               </table>
            <pre data-bind="text: ko.toJSON($data, null, 2)"></pre>
        </div>                
 </div>

于 2014-12-18T14:20:47.433 に答える