将可观察变量设为null

时间:2016-05-19 06:12:26

标签: javascript jquery knockout.js knockout-2.0

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

var obvar = ko.observable("");

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

在我的一项检查中,我想清空内容,如果变量" obvar"包含

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

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

1 个答案:

答案 0 :(得分:3)

您的第一个代码段:

var obvar = ko.observable("");

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

有一个特殊但重要的特征。 obvar可观察量首先包含string,在第二行之后包含Object

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

  

...如果变量obvar包含{view:'dummy.html',model:'dummymodel'}

,我想清空内容

我不清楚你的意思是“清空”内容,也许也是你的意思(因为你已经尝试obvar("");,这在某种意义上说“清空”内容,但它没有期望的结果)。

无论如何,有两种方法可以在 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>

相关问题