首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于observableArray的数控机床的计算

基于observableArray的数控机床的计算
EN

Stack Overflow用户
提问于 2013-07-04 09:35:26
回答 2查看 114关注 0票数 0

在我的视图模型中,有一个名为observableArray的projectLine。这个数组由projectsWorked对象组成。我需要得到数组中projectsWorked.projectHourWork的和。我编写了calcTotal()来计算总计。

代码语言:javascript
复制
  function ViewModel() {
        var self = this;
        this.CheckIn = ko.observable();
        this.CheckOut = ko.observable();
        this.Lunch = ko.observable();
        this.projectLine = ko.observableArray([new projectsWorked()]);

        this.TimeForWork = ko.computed(function () {
            return this.CheckIn() ? this.CheckOut() ? parseFloat(this.Lunch()) ? parseFloat(this.CheckOut()) - parseFloat(this.CheckIn()) - parseFloat(this.Lunch()) : parseFloat(this.CheckOut()) - parseFloat(this.CheckIn()) : 0 : 0;
        }, this);

        this.Rest = ko.observable();

        this.RemainHour = ko.computed(function () {
            return self.TimeForWork() ? self.Rest() ? self.WorkOnProject() ? parseFloat(self.TimeForWork()) - parseFloat(self.Rest()) - parseFloat(self.WorkOnProject()) : parseFloat(self.TimeForWork()) - parseFloat(self.Rest()) : parseFloat(self.TimeForWork()) : 0
        }, this);

        this.WorkOnProject = ko.observable();
        this.grandTotal = ko.observable();

        this.AddLine = function () {
            alert('hello Add');

            this.calcTotal();
            this.projectLine.push(new projectsWorked());
        };

      //Problem Occurs in here
       this.calcTotal = function () {
           var total = 0;
           alert('ABC');
            ko.utils.arrayForEach(self.projectLine(), function () {
                alert('BB');
                alert(self.projectLine.projectWork);
                total += self.projectLine.projectHourWork;
            })
                //$.each(self.projectLine, function () {
                //    totalh = parseFloat($('#txthour').val());


                //    total += totalh;
                //    alert(total);
                //})
                this.grandTotal = total;
           //     alert(total);
        }

    };

    function projectsWorked() {
        var self = this;
        this.projectEnable = ko.observable(false);
        this.hours = ko.observable();
        this.projectHourWork=ko.computed(function () {
            return this.hours();
            }, this);

        this.selectedProject = ko.observable();

        this.removeLine = function (line) {
            alert('hello Remove');     
            self.projectLine.removeLine(this);
        };
    };

    var data = [
        "ABC","CDE"
    ];   


    ko.applyBindings(new ViewModel());

但是这个计算给了我不正确的数值。Firebug将self.projectLine.projectHourWork值显示为未定义的值。这是什么原因?我怎么算出总数?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-04 09:43:45

在calcTotal函数中,您指的是行总+= self.projectLine.projectHourWork中的self.projectLine;

self.projectLine是一个observableArray,所以我非常肯定projectHourWork不是在self.projectLine上定义的。

也许这就是你想要做的:

代码语言:javascript
复制
ko.utils.arrayForEach(self.projectLine(), function (pl) {
    alert('BB');
    total += pl.projectHourWork();
})

希望能帮上忙。

票数 1
EN

Stack Overflow用户

发布于 2013-07-04 09:44:28

我认为问题在于您在projectLine数组上循环的方式。

在循环"self“中是对视图模型对象的引用,而不是对数组的每个元素的引用。试一试这样的东西:

代码语言:javascript
复制
ko.utils.arrayForEach(self.projectLine(), function (project) {
    alert(project.projectWork);
    total += project.projectHourWork();
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17466843

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档