Knockout JS [Object object]拉属性

时间:2016-03-08 11:02:33

标签: javascript html knockout.js

我的JS中有一个对象从数组切片:

self.deploysToDevId = ko.computed(function() {
  var deployToDev = ko.utils.arrayFilter(self.builds(), function(build) {
    return build.buildType() == 'Deploy to Development';
  }, self);
  var deployToDevID = deployToDev.slice(0,1).id
  return deployToDevID;
});

此对象最初来自名为builds的数组,是一个构建对象。但是,我试图得到一个属性,构建的“id”,这是构建的属性,我希望能够存储它并将其作为对象返回,但是当我执行data-bind打印时text [对象]

self.getIdOfMostRecentDeploy  = ko.computed(function() {
  var idOfMostRecentDeploy = (self.deploysToDevId().id);
  return idOfMostRecentDeploy;
});

这应该将对象的id存储为“idOfMostRecentDeploy”,但它没有这样做。

      self.deploysToDevId = ko.computed(function() {
    var deployToDev = ko.utils.arrayFilter(self.builds(), function(build) {
        return build.buildType() == 'Deploy to Development';
        }, 
        self);
        var deployToDevID = deployToDev[0];
        return deployToDevID;
});

这是我尝试的另一种方法,这次尝试获取数组中的第一个对象并将其id分配给变量。虽然,我仍然只是得到[对象]

2 个答案:

答案 0 :(得分:0)

当你这样做时:

self.deploysToDevId = ko.computed(function() {
  var deployToDev = ko.utils.arrayFilter(self.builds(), function(build) {
    return build.buildType() == 'Deploy to Development';
  }, self);
  var deployToDevID = deployToDev.slice(0,1).id
  return deployToDevID;
});

你正在创建一个只包含id对象的deployToDev的计算器,我认为它是一个可观察的(也就是说,你需要通过eval获取值的javascript函数)< / p>

然后,当您尝试使用以下方式访问它时:

(self.deploysToDevId().id)

这基本上没有返回,因为你要查找的“id”在计算本身self.deploysToDevId()中,而不在任何内部id属性中

编辑:

我创造了这个可以帮助你的小提琴:

https://jsfiddle.net/r88zkn11/

在你的情况下唯一的区别是,如果对象有idbuildType作为字符串对象,它们是函数,所以如果你必须使用它们,你必须评估它们(使用{ {1}}代替buildType()

答案 1 :(得分:0)

执行此操作时:

var deployToDevID = deployToDev.slice(0,1).id;

你说的是:给我一个数组长一个元素,并获取该数组的id属性。该数组没有id属性。相反,您应该索引第一个元素:

var deployToDevID = deployToDev[0].id;

然后,正如JulioCT所说,计算将返回id。它没有id成员,它只是id。

在上一个示例中,您采用了第一个元素,但不要采用其id属性,因此将其命名为deployToDevID会产生误导。按照我上面的建议采用id,然后在您想要使用该ID的任何地方使用deployToDevID