1

私はこのようなものでノックアウトjsのモデルを持っています:

var Model = function(model)
{
    var self = root = this;
    self.ObjectA = new ObjectA(model.ObjA);

    self.includeImage = function(image){
        self.ObjectA.Images.push(image);
    }        
}

var ObjectA = function(objA){
     var self = this;
     self.Images = ko.observableArray();
     self.ObjectB = ko.observableArray(ko.utils.arrayMap(objA.ObjectsB, function(ob){
        return new ObjectB(ob);  
     }));
}

var ObjectB = function(objB){
     var self = this;
     self.ObjectC = new ObjectC(objB.objC);
}

var ObjectC = function(objC){
     var self = this;
     self.ImagesC = ko.utils.arrayMap(objC.ImagesC, function(img){
         return new Image(img);
     });
}

var Image = function(image){
     var self = this;
     self.Key = image.Key;
     self.Value = image.Value;
     self.Url = image.Url;
}

そして、私はこのHTMLをテーブルに置いています:

<tbody data-bind="foreach: ObjectA.ObjectB">
<tr>
    <td>
       <!-- ko if: ObjectC.Images.length > 0 -->
       <div>
          <img data-bind="attr: { src: ObjectC.Images[0].Url }" />
          <button data-bind="click: root.includeImage">include</button>
       </div>
       <div data-bind="foreach: ObjectC.Images">
          <!-- ko if: $index() !== 0 -->
          <div>
              <img data-bind="attr: { src: Url }" />
              <button data-bind="click: root.includeImage">include</button>
          </div>
          <!-- /ko -->
       </div>
       <!-- /ko -->
    </td>
</tr>
</tbody> 

私が抱えている問題は、関数includeImageであり、受け取るパラメータはObjectCの画像ではありません。パラメータはObjectB型です。なぜですか?そのいくつかのforeachが壊れていますか?

4

1 に答える 1

0

私はちょうど問題を見つけました!ばかげた問題であり、質問のコードに問題を引き起こしているものを含めるのを忘れていました! 笑

主な問題を確認できるようにコードを編集し、2 番目の foreach の外側の最初のボタンでした! もちろん、最初の foreach の root.includeImage は機能しません。問題を修正するだけです:

<button class="action add" data-bind="click: function() { root.includeImage(ObjectC.Images[0]) }">include</button>
于 2013-03-19T20:03:03.523 に答える