2014-07-04 65 views
0

我實際上正在與淘汰賽合作,並且想知道是否有方法可以反轉淘汰賽屬性。我有一個函數IsArchived,並且想創建一個名爲NotArchived的反函數。但我有問題。取消淘汰中的房產

主要問題是我沒有看到我的輸出有任何區別。例如,我的系統中共有2000個帳戶,其中顯示1500個帳戶爲已歸檔,而2000個帳戶顯示爲未歸檔。而不是它應該只顯示500個非存檔帳戶。

  <li> 
      <label id="isArchived"> 
       <input type="checkbox" data-bind="checked: isArchived" /><span>Archived</span> 
      </label> 
     </li> 
     <li> 
      <label id="NotArchived"> 
       <input type="checkbox" data-bind="checked: NotArchived" /><span>Not Archived</span> 
      </label> 
     </li 

的JavaScript:

function WorkersViewModel() { 
    var self = this; 
    var initialized = false; 

    self.isArchived = ko.observable(false); 
    self.NotArchived = ko.observable(true); 

}; 
    self.navigateToSearch = function(uriArray) { 

     if (self.isArchived()) { 
      uriArray.push({ 
       isArchived: true 
      }); 
     } 
     if (self.NotArchived()) { 
      uriArray.push({ 
       NotArchived: false 
      }); 
} 

    self.runSearch = function() { 
     var parameters = { 

      IsArchived: self.isArchived() ? true : null, 
      NotArchived: self.isArchived() ? false : null, 
     }; 
+1

不是一個複選框足夠的布爾狀態 – Anders

+0

@Anders:是的,你是完全正確的,但我也同意,有些情況下,只是在標記中引用一個可觀察的更容易和更短。 – deblocker

回答

2

您可以通過使用一個computed做到這一點。

function WorkersViewModel() { 
    var self = this; 
    var initialized = false; 

    self.isArchived = ko.observable(false); 
    self.NotArchived = ko.computed({ 
     read: function(){ return !self.isArchived() }, 
     write : function(value) { self.isArchived(!value); } 
    }); 
}; 
0

需要從你的評價程序取決於,你可以使用:

  1. 計算觀察到
  2. 訂閱

因爲與溶液中的計算觀察到已經被公佈,在這裏是使用訂閱的片段:

self.isArchived = ko.observable(false); 
self.isNotArchived = ko.observable(true); 
self.isArchived.subscribe(function(newValue) { 
    self.isNotArchived(!newValue); 
}); 

Anozher的不同之處在於,計算的observable將在視圖模型實例化時第一次被評估,因此通過使用訂閱,您應該向兩個觀察值提供正確的初始值。