2012-11-06 76 views
2

當我將項目添加到observableArray時,我正忙於淘汰賽並獲取用戶界面。初始列表和deleteEmployee工作正常,更新UI appropriatley,但是當我嘗試添加一個員工時,UI根本不會更新。下面是viewmodel和html。感謝任何幫助,我可以得到這一點。

視圖模型:淘汰賽推送不更新圖形用戶界面

function viewModel() { 
     var self = this; 
     self.employees = ko.observableArray(); 

     self.deleteEmployee = function() { 
      var employee = this; 
      dataservice.del(this.id, function() { 
       self.employees.remove(employee); 
      }) 
     }, 

     self.addEmployee = function() { 
      var emp = {}; 
      emp.Name = $("#newName").val(); 
      emp.Email = $("#newEmail").val(); 
      dataservice.add(emp, function (data) { 
       var employee = new Employee(data.id, emp.Name, emp.Email); 
       self.employees.push(employee); 
      }); 
     }.bind(self); 

     $.each(data.rows, function (index, row) { 
      self.employees.push(new Employee(row.value.Id, row.value.Name, row.value.Email)); 
     }); 

     return { 
      employees: self.employees, 
      deleteEmployee: self.deleteEmployee, 
      addEmployee: self.addEmployee 
     } 
    }; 

    ko.applyBindings(new viewModel()); 



的Html

<article data-bind="foreach: employees"> 
       <div class="emp"> 
        <div class="empTop"> 
         <span data-bind="text: name"></span> 
         <div class="del" data-bind="click: $parent.deleteEmployee, clickBubble: false"></div> 
        </div> 
        <div class="empContent"> 
         <div class="row"> 
          <label for="name">Name</label> 
          <input name="name" type="text" data-bind="value: name"> 
         </div> 
         <div class="row"> 
          <label for="name">Email</label> 
          <input name="email" type="text" data-bind="value: email"> 
         </div> 
         <div class="row"> 
          <input type="button" value="Update"> 
         </div> 
        </div> 
       </div>     
      </article> 

      <aside> 
       <h3>Create</h3> 
       <div> 
        <div class="row"> 
         <label for="newName">Name</label> 
         <input id="newName" name="newName" type="text"> 
        </div> 
        <div class="row"> 
         <label for="newEmail">Email</label> 
         <input id="newEmail" name="newEmail" type="text"> 
        </div> 
        <div class="row"> 
         <input type="button" value="Create" data-bind="click: addEmployee"> 
        </div> 
       </div> 
      </aside> 
+0

btw。我沒有得到任何錯誤或類似的東西。我遇到的唯一問題是UI未更新。如果我在添加員工後刷新頁面,它會正確顯示在列表中 – limlim

+0

在我看來,dataservice.add不會調用回調函數。你嘗試調試它嗎?是self.employees.push(員工);函數調用? –

+0

是self.employees.push(員工);被調用並且員工對象支持正確的數據。 – limlim

回答

1

看來,這個問題是不是與淘汰賽。我把你的代碼放到JSFiddle中,在javascript中註釋了幾行,但沒有觸及你的HTML,創建工作正常。

看小提琴:http://jsfiddle.net/mshmelev/ZF5pC/

所以,這個問題可能是:

  1. dataservice.add()功能不調用回調
  2. 東西是不對您的Employee類(我創建只是一個存根在小提琴)
0

原來,獲得渲染的項目,但這是尷尬,我有一些隱藏元素的jquery添加了$('。emp')。hide()。這個小小的錯誤讓我感到困惑不已。謝謝你的所有建議。