2016-05-19 10 views
1

zu machen habe ich eine eine beobachtbare Variable in folgendem Format:eine beobachtbare Variable als null

var obvar = ko.observable(""); 

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

In einem meiner Kontrollen ich den Inhalt geleert werden soll, wenn die Variable „obvar“

{view:'dummy.html',model:'dummymodel'}. 
enthält

Ich versuchte obvar("");, aber es ist nicht passiert. obvar =""; würde es in normale Zeichenfolge konvertieren. Wie entleere ich den Inhalt?

+0

Interessant - aber obvar ("") funktioniert. Haben Sie ein Problem mit sich selbst? oder verschiedene Bereiche? https://jsfiddle.net/brianlmerritt/vojte1gg/ – brianlmerritt

Antwort

3

Ihr erster Code-Schnipsel:

var obvar = ko.observable(""); 

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

hat ein besonderes, aber wichtiges Merkmal. Die obvar Observable zuerst enthält eine string, und nach der zweiten Zeile enthält es eine Object.

Ihre Anforderung, die Sie erwähnen ist (Hervorhebung von mir):

... Ich möchte leeren den Inhalt, wenn variable obvar{view:'dummy.html',model:'dummymodel'} enthält

Es ist mir unklar ist, was Sie meinen Sie mit "leeren" den Inhalt, und vielleicht auch Ihnen (seit Sie versucht haben obvar("");, die in gewisser Weise den Inhalt "leert", aber es hatte nicht das gewünschte Ergebnis).

Jedenfalls sind hier zwei Möglichkeiten, es zu tun, in einem runnable Schnipsel so können Sie Beweis sehen, dass es funktioniert:

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>