使可观察变量为空

Making a observable variable as null

我有一个以下格式的可观​​察变量:

var obvar = ko.observable("");

obvar({view:'dummy.html',model:'dummymodel'});

在我的一张支票中,我想清空内容,如果变量 "obvar" 包含

{view:'dummy.html',model:'dummymodel'}.

我尝试了 obvar(""); 但它没有发生。 obvar =""; 会将其转换为普通字符串。 如何清空内容?

您的第一个代码片段:

var obvar = ko.observable("");

obvar({view:'dummy.html',model:'dummymodel'});

有一个特殊但重要的功能。 obvar observable 首先包含一个 string,在第二行之后它包含一个 Object.

您提到的要求是(强调我的):

...I want to empty the contents, if variable obvar contains {view:'dummy.html',model:'dummymodel'}

我不清楚你说的 "empty" 内容是什么意思,也许你也不清楚(因为你已经尝试 obvar("");,从某种意义上说 "empties" 内容, 但没有达到预期的效果)。

无论如何,这里有两种方法,在 runnable 片段中,这样您就可以看到它正在工作的证据:

function ViewModel() {
  var self = this;
  
  var obvar = ko.observable("");
  obvar({view:'dummy.html',model:'dummymodel'});
  
  self.obvar = obvar; // Expose it so the view can demo the workings.
  
  function canEmptyContents() { 
    // empty the contents if variable "obvar" contains {view:'dummy.html',model:'dummymodel'}
    return obvar().view === 'dummy.html' && obvar().model === 'dummymodel';
  }
  
  self.option1 = function() {
    if (canEmptyContents()) {
      obvar("");
    }
  };
  
  self.option2 = function() {
    if (canEmptyContents()) {
      obvar({ dummy: "", model: "" });
    }
  };
}

ko.applyBindings(new ViewModel());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>

<button data-bind="click: option1">Option 1: empty with string</button>
<button data-bind="click: option2">Option 2: empty with empty object</button>
<hr>
Debug info: <pre data-bind="text: ko.toJSON($root, null, 2)"></pre>