在Knockout中否定一个属性

时间:2014-07-04 20:45:40

标签: javascript knockout.js

我实际上正在使用淘汰赛,并想知道是否有一种方法可以反转淘汰赛属性。我有一个函数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,
        };

2 个答案:

答案 0 :(得分: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); }
    });
};

答案 1 :(得分:0)

根据您需要的评估顺序,您可以使用:

  1. 计算可观察
  2. 订阅
  3. 因为已经发布了带有计算observable的解决方案,所以这是一个使用订阅的片段:

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

    Anozher的不同之处在于,在实例化视图模型时,计算的observable也将首次被评估,因此通过使用订阅,您应该向两个可观察者提供正确的初始值。