说我有一个jserv of observables:
self.name = ko.observable('Arnab');
self.surname= ko.observale('Bhagabati')
var person = {
name:ko.observable('Arnab'),
lastName= ko.observale('Bhagabati')
}
我可以通过console.log(person.name());
访问此人的姓名
如何检查我的person
是否有被淘汰的可观察属性,例如salary
?
if (typeof person.salary() !== 'undefined')
给出params.salary is not a function
答案 0 :(得分:2)
可观察性是功能。如果没有salary
属性,person.salary()
将抛出异常。
所以你可以使用:
if (typeof ko.unwrap(person.salary) !== 'undefined')
{
}
unwrap
返回属性的值,无论它是否可观察。
有关更多信息,请参阅this question
答案 1 :(得分:2)
我如何检查我的人是否有被淘汰的可观察财产,比如工资?
(强调我的)
如果您使用与if (ko.unwrap(person.salary))
一致的检查,与其他答案一样,您基本上会检查是否有定义的salary
属性。
即:
person = { salary: undefined };
person = { };
person = { salary: ko.observable() };
对于true
typeof ko.unwrap(person.salary) === "undefined"
如果我从字面上理解你所写的内容,这并不能回答“#39; object有一个名为salary
的可观察属性。
要回答这个问题,您需要ko.isObservable
:
var persons = [
[{ }, "{ }"],
[{ salary: undefined }, "{ salary: undefined }" ],
[{ salary: ko.observable() }, "{ salary: ko.observable()" ]
]
var check1 = person => typeof ko.unwrap(person.salary) === "undefined";
var check2 = person => ko.isObservable(person.salary);
console.log(check1.toString());
persons.forEach(([p, c]) => console.log(c, "->", check1(p)));
console.log(check2.toString());
persons.forEach(([p, c]) => console.log(c, "->", check2(p)));

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
&#13;
可能是我的问题太过于字面意思了,你所需要的只是ko.unwrap
,但我觉得我必须分享差异
答案 2 :(得分:0)
在以下代码中,!=
会同时检查null
和undefined
:
if (person.salary != null) {
// ...
}
答案 3 :(得分:0)
var val = ko.unwrap(person.salary);
和
console.log(ko.unwrap(person.salary));
无论person.salary
是否可观察,都会有效。
答案 4 :(得分:0)
如果需要快速解决方案,只需查看对象类型是否为函数,然后添加一些检查以检查其中是否存在剔除特定函数。当您非常确定可观察对象即将出现但还没有出现时,在ko.computed中使用此方法很方便。
var isKoObservable = function(obs) {
var retVal = false;
if (typeof obs === "function") {
if (typeof obs.subscribe === "function" && typeof obs.notifySubscribers === "function") {
// its HIGHLY likely to be an observable or observableArray
retVal = true;
}
}
return retVal;
}
有关详细信息,请参见此SO答案: how to tell if a javascript variable is a function