0

이것은 매우 간단하지만, Knockout JS를 처음 사용했습니다. 자습서의 무리에 따라,이 마련했습니다ASP.net MVC/녹아웃 JS 매핑 - ViewModel을 업데이트 할 수 없습니다.

// Create view model 
     var viewModel = function() { 
      var self = this; 
      self.master = ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))); 
      self.total_results = ko.observable(self.master.totalRecordCount()); 
      self.pager = ko.pager(self.total_results); 
      self.pager().CurrentPage.subscribe(function() { 
       self.search(); 
      }) 
      self.search = function() { 
       $.ajax({ 
        type: "GET", 
        url: "/api/get?data=1&start_index=" + self.pager().FirstItemIndex() + "&end_index=" + self.pager().LastItemIndex() + "", 
       }).done(function (pagedData) { 
        // Map model; create pager 
        ko.mapping.fromJS(pagedData, self.master); 
        //self.total_results(self.master.totalRecordCount()); 
       }).error(function (ex) { 
        alert("Error"); 
       }); 
      } 
     } 

     $(function() { 
      // Apply 
      ko.applyBindings(viewModel); 
     }); 

내가 페이징 버튼, 검색 방법 실행을 클릭하고 새로운 데이터를 잡고합니다. ViewModel을 업데이트하면 아무 일도 일어나지 않습니다. 왜 이렇게 될지 모든 아이디어?

답변

0

난 정말 바보 같은 느낌이 있지만, 이것은 전체 문제였다

var viewModel = function() { 
      var self = this; 
      self.master = ko.mapping.fromJS(@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(Model))); 
      self.pager = ko.pager(ko.observable(self.master.totalRecordCount())); 

      self.pager().CurrentPage.subscribe(function() { 
       self.search(); 
      }); 

      self.search = function() { 
       $.ajax({ 
        type: "GET", 
        url: "/api/get?data=1&start_index=" + self.pager().FirstItemIndex() + "&end_index=" + self.pager().LastItemIndex() + "", 
        success: function (obj) { 
         ko.mapping.fromJS(obj, self.master); 
        } 
       }); 
      } 
     } 

     $(document).ready(function() { 
      ko.applyBindings(new viewModel()); 
     }); 

내가 적용 할 때 나는 "새로운"뷰 모델을 잡는하지 않았기 때문에 바인딩, 아무것도 발생하지 않습니다. Drat!

2

self.master의 내용을 덮어 쓰지 않고 업데이트하려고합니다. 그래서에 done 콜백이 줄을 변경 :

// Map model; create pager 
ko.mapping.fromJS(pagedData, self.master); 
+0

오늘 아침에 일찍 시도해 보았습니다. – jlrolin

+0

다른 문제가있을 수 있지만이 부분을 반드시 수정해야합니다. – JohnnyHK

+0

나는이 질문에서 코드를 변경했다. 아직 아무것도. – jlrolin