Knockout JS:对象总是返回undefined,即使应该有值

时间:2017-01-30 15:26:34

标签: knockout.js

我是Knockout的新手,我仍在努力了解它的工作原理。我有这个函数应该从ajax调用返回数据但是当我尝试获取值时,对象说它是未定义的。

我的模型未定义数据:

    function ViewModel() {
    var self = this;
    self.Organization = ko.observable();
    self.App = ko.observableArray([]);
    self.Deployed = ko.observableArray([]);
    self.EngagementSolutions = ko.observableArray([]);
    self.MS = ko.observable();


   self.ActiveEngagements = ko.computed(function () {
        var ActiveEngagements = 0;
        ko.utils.arrayForEach(self.EngagementSolutions(), function (item) {
            if (item.IsActive) {
                ActiveEngagements++;
            }
        });
        return ActiveEngagements;
    });
    self.TicketCount = ko.computed(function () {
        console.log(self.Organization.UniqueICount);
        var uniqueOpenICount = (self.Organization.UniqueOpenICount === "undefined" ? self.Organization.UniqueOpenICount : 0);
        var uniqueICount = (self.Organization.UniqueICount === "undefined" ? self.Organization.UniqueICount : 0);
        console.log(uniqueOpenICount + " / " + uniqueICount);
        return uniqueOpenICount + " / " + uniqueICount;
    });

我的函数,其中值填充对象:

    function SucessFunction(data) {
    console.log(data.Organizations[0].UniqueICount);

        var newOrganization = new OrganizationObject();
        newOrganization.UniqueICount = data.Organizations[0].UniqueICount;
        newOrganization.UniqueOpenICount = data.Organizations[0].UniqueOpenICount;

        console.log(newOrganization);
        viewModel.Organization = newOrganization;
        console.log(viewModel.Organization);
    }
});

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

您未正确使用observable。 KO的可观察者是功能

您可以通过使用新值作为参数调用它们来设置它们的值:

viewModel.Organization(newOrganization);

viewModel.Organization = newOrganization; // Not this

通过不带参数调用它们来获得它们的价值:

console.log(viewModel.Organization());
// -------------------------------^^

console.log(viewModel.Organization);      // Not this

主要是,您滥用它的方式会导致计算机无法正常工作且视图无法更新。

还有一些其他问题:

  • 当您开始正确使用observable时,您还需要更新计算机的代码,不仅要正确获取其值,还要考虑到它开始为{{1}的事实。 },这意味着你无法从中读取这些从属属性。
  • 您正在将属性值与undefined进行比较。我的猜测是你可能想将类型"undefined"进行比较,或者将它们的值与"undefined"进行比较。但是,将它们的值与undefined进行比较会得到"undefined",除非它们实际上包含字符串 false
  • 还有一些大括号和括号不匹配,至少在问题的代码中。

这是一个粗略的更新,但它并不意味着完成所有工作,只是为了指出正确的方向:

"undefined"