有没有办法迭代javascript对象上的属性并测试可观察对象,以便我可以在其上创建预订?下面只是一个简单的示例,但我的对象具有大约30个属性。
var name = {
firstName: ko.observable(),
lastName: ko.observable()
};
// Iterate properties and test for observable to create subscription on.
lastName.subscribe(function(s) {
// modified
);
firstName.subscribe(function(s) {
// modified
);
答案 0 :(得分:2)
您可以在name
对象上Object.values
,并为ko.isObservable
的任何对象订阅:
Object.values(name).forEach(v => {
if(ko.isObservable(v))
v.subscribe(() => { console.log("Do the cha cha") })
})
您可以看到它working here
如果要保留列表,则只需过滤ko.isObservable
:
let subs = Object.values(name).filter(ko.isObservable)
然后稍后订阅或取消订阅。
subs.forEach(v => v.subscribe(() => { console.log("Did the cha cha") }))
答案 1 :(得分:1)
类似这样的事情。这样,您就可以在代码中稍后取消订阅的对象列表。
var nameTest = {
salutation: "Hi",
firstName: ko.observable("Test"),
lastName: ko.observable("Person")
};
var subscribedObjects = Object.values(nameTest)
.filter(item => ko.isObservable(item))
.map(observableItem => observableItem.subscribe(newValue => console.log(newValue)));
ko.applyBindings(nameTest);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>
<div data-bind="with: nameTest">
<input type="text" data-bind="textInput: salutation" />
<input type="text" data-bind="textInput: firstName" />
<input type="text" data-bind="textInput: lastName" />
</div>
<div data-bind="with: nameTest">
<span data-bind="text: salutation"></span>
<span data-bind="text: firstName"></span>
<span data-bind="text: lastName"></span>
</div>