【问题标题】:Loop through JS object which has knockout observable properties循环遍历具有可淘汰可观察属性的 JS 对象
【发布时间】:2014-08-07 05:06:25
【问题描述】:

我有以下 JS 对象:

function AdvancedFilters() {
    var self = this;
    self.AdvancedColId = ko.observable();
    self.AdvancedComapanyName = ko.observable();
    self.AdvancedClientCountry = ko.observable();
    self.AdvancedClientCity = ko.observable();
    self.AdvancedDatabaseLocation = ko.observable();
    self.AdvancedUserName = ko.observable();
    self.AdvancedEmail = ko.observable();
    self.AdvancedPhoneNo = ko.observable();
    self.AdvancedAccessFrom = ko.observable();
    self.AdvancedAccessTo = ko.observable();
    self.AdvancedCreatedOn = ko.observable();
    self.AdvancedCandidates = ko.observable();
    self.AdvancedErrorsReported = ko.observable();
    self.AdvancedActive = ko.observable();
    self.AdvancedRequestes = ko.observable();
}

我必须遍历AdvancedFilters 对象中存在的所有属性,并执行适用于所有属性的操作,而不是分别访问每个属性。我必须这样做:

for (var property in AdvancedFilters) {         
         // do something with property     
}

我尝试了上面的语法,但它不起作用。

【问题讨论】:

  • 您必须在实例上工作:var obj = new AdvancedFilters(); for (var prop in obj) {}
  • 是for循环在函数上工作吗?你真的试过了吗?
  • @Akhlesh 循环正在工作,但我使用 new 关键字将 JS 对象存储在可淘汰的可观察数组中,因此我必须检查循环是否适用于可观察数组。现在忙于其他事情,但我一定会检查这个并稍后在这里更新......

标签: javascript knockout.js javascript-objects


【解决方案1】:

试试这个

function AdvancedFilters() {
    var self = this;
    self.AdvancedColId = ko.observable();
    //...
}

var obj = new AdvancedFilters();
for (var property in obj) {         
    alert(ko.isObservable(obj[property]) ? obj[property]() : property);
}

【讨论】:

  • 这显然是他的意思。他当然不想迭代函数的属性(尽管这在技术上是可行的:函数也可以有属性)。
猜你喜欢
  • 2016-01-16
  • 2019-06-02
  • 2016-01-21
  • 2014-06-23
  • 2015-10-16
  • 2013-05-30
  • 2018-06-14
  • 2013-03-06
  • 2014-08-08
相关资源
最近更新 更多