0

これが私のコードです:

<table>
  <tbody data-bind="foreach:Models">
     <tr>
         <td data-bind="text:Id"></td>
         <td data-bind="text:name"></td>
     </tr>
  </tbody>
</table>
function viewModel(){
   var self = this;
   self.Models = ko.observableArray();
}
var vm = new viewModel();

function mappingDatas(id){
  var results = [{ Id:1,name:"One" },{Id:2,name:"Two"}];
   if(id == 1)
   {
       results = [{ Id:3,name:"Three" },{Id:4,name:"Four"}];
   } 
   vm.Models = ko.mapping.fromJS(results);
   //vm.Models = ko.mapping.fromJS(results,vm.Models);//ie8 throw Stack overflow at line:4
   ko.applyBindings(vm);
}
$(function(){
   mappingDatas(0);
   $('#btn').click(function(){
      mappingDatas(1);
   })
});

コードは実行されている可能性がありますが、結果が変わると (ボタンをクリック)、動作しなくなります。エラーは「NotFoundError:ノードが見つかりませんでした」です。どのようにできるのか?ありがとう!!!

4

1 に答える 1

1

私はあなたのjsを少し変更しましたが、今はうまくいっているようです。結果配列を変更した後、applyBindings を再度行う必要はありません。vm.Models を直接更新するだけで済みます。フィドル: http://jsfiddle.net/aW6yw/3/

js:

function viewModel(){
   var self = this;
   self.Models = ko.observableArray();
}
var vm = new viewModel();

function mappingDatas(id){
  var results = [{ Id:1,name:"One" },{Id:2,name:"Two"}];
   if(id == 1)
   {
       results = [{ Id:3,name:"Three" },{Id:4,name:"Four"}];
   } 
    var vmResults = ko.mapping.fromJS(results);
   vm.Models(vmResults());

   //vm.Models = ko.mapping.fromJS(results,vm.Models);//ie8 throw Stack overflow at line:4
   //ko.applyBindings(vm);
}


   mappingDatas(0);
   $('#btn').click(function(){
      mappingDatas(1);
   })

ko.applyBindings(vm);  
于 2013-11-01T10:09:06.060 に答える