2014-06-10 16 views
0

我正在淘汰賽和有問題。下面是我的.js代碼,並且ko.applyBindings(viewModel);在document.ready下完全停用,並且根本不工作。當我端的方法$(「#dtTable TBODY」)添加淘汰賽是不是在document.ready下工作

ko.applyBindings(viewModel); 

它纔會起作用。在(「點擊」,「TR」,()的函數。請提出什麼問題,如果我把我的代碼數據錶行點擊裏面,當我點擊第二次其他行或同一行的錯誤來「我們無法定義綁定多次。」 請告訴我問題的代碼和2我應該在哪裏把應用綁定

/// <reference path="knockout-3.1.0.debug.js" /> 

$(document).ready(function() {  

    var viewModel = new function() { 
     this.firstname = ko.observable(); 
     this.lastname = ko.observable(); 

    }; 


    $('#dTable').dataTable({ 
      "scrollY": 300, 
      "scrollCollapse": true, 
      "jQueryUI": true   
    }); 

    var selectedRow; 

    $('#dTable tbody').on('click', 'tr', function() { 
     $(this).toggleClass('selected'); 
     selectedRow = $(this).closest('tr'); 

     viewModel.firstname = selectedRow.context.cells(0).innerHTML; 
     viewModel.lastname = selectedRow.context.cells(1).innerHTML;   

    }); 


    $('#btnSaveChanges').click(function() {  

     var saveRequest = new Object(); 

     saveRequest.FirstName = viewModel.firstname; 
     saveRequest.LastName = viewModel.lastname; 


     $.ajax({ 
      async: true, 
      type: 'POST', 
      url: '/Person/GetPerson', 
      data: JSON.stringify(saveRequest), 
      contentType: "application/json; charset=utf-8", 
      dataType: 'json', 
      success: function (result) { 
       if (result == true) { 

        alert("Division saved successfully!"); 

        if ($("#clickedButton").val() == "Add") { 
         AddNewRowToDataTable(saveRequest); 
        } 
        else { 
         UpdateRowToDataTable(); 
        } 

       } 
       else { 
        alert("did not save!"); 
       } 
      } 
     }); 


    }); 

    var t = $('#dTable').DataTable(); 

    $('#btnAdd').on('click', function() { 

     $("#clickedButton").val("Add"); 

     viewModel.firstname = ""; 
     viewModel.lastname = ""; 

    }); 

    function AddNewRowToDataTable(saveRequest) { 
     t.row.add([ 
      saveRequest.FirstName, 
      saveRequest.LastName, 

     ]).draw(); 
    } 

    function UpdateRowToDataTable() { 
     selectedRow.context.cells(0).innerHTML = viewModel.firstname; 
     selectedRow.context.cells(1).innerHTML = viewModel.lastname; 

    } 
    ko.applyBindings(viewModel); 

}); 

謝謝並等待回覆

回答

1

viewModel.firstname and viewModel.lastnames是可觀察到的。你可以像這樣給它們賦值......

viewModel.firstname(selectedRow.context.cells(0).innerHTML); 
viewModel.lastname(selectedRow.context.cells(1).innerHTML); 

當你使用賦值語句時,你基本上用別的東西來覆蓋observable。在第一次運行ko.applyBindings()時,視圖仍然對觀察對象有約束力,這就是爲什麼在您再次重新應用綁定(您不應該這樣做)之前,值不會改變。

一旦這些分配是固定的,會出現與此代碼的問題...

saveRequest.FirstName = viewModel.firstname; 
saveRequest.LastName = viewModel.lastname; 

如果firstnamelastname是可觀察,你需要通過調用它們來訪問它們的值...

saveRequest.FirstName = viewModel.firstname(); 
saveRequest.LastName = viewModel.lastname(); 
+0

非常感謝它的工作。 – BraveBoy