我有一个以下格式的可观察变量:
var obvar = ko.observable("");
obvar({view:'dummy.html',model:'dummymodel'});
在我的一项检查中,我想清空内容,如果变量" obvar"包含
{view:'dummy.html',model:'dummymodel'}.
我试过了obvar("");
,但没有发生。
obvar ="";
会将其转换为普通字符串。
如何清空内容?
答案 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>