Javascript 计算敲除中一些输入的总和

Javascript 计算敲除中一些输入的总和,javascript,knockout.js,Javascript,Knockout.js,我的HTML代码的一部分: <!-- ko foreach: teamMembers --> <tr> <!-- ko foreach: days --> <td> <!-- ko foreach: $data --> <input type="text" data-bind="value: number1"> <input ty

我的HTML代码的一部分:

<!-- ko foreach: teamMembers -->
    <tr>
      <!-- ko foreach: days -->
      <td>
       <!-- ko foreach: $data -->
          <input  type="text" data-bind="value: number1">
          <input  type="text" data-bind="value: number2">
        <!-- /ko -->   
      </td>
      <!-- /ko -->
      <td>Total sum</td>
      <td>
        <button class="btn" data-bind='click: $root.addShift'>
          Add shift
        </button>
      </td>
    </tr>
    <!-- /ko -->

总额
加班次
viewmodel代码:

function TimeCardViewModel() {
    var self = this; 
    self.teamMembers=ko.observableArray();
    self.addShift = ko.pureComputed(function() { });               
}
$.ajax({
      type:"POST"  
      url: "/...json"
    }).then(function(data){   
      for (var i=0; i<data.length; i++)  {
        timeCardViewModel.teamMembers.push({days:data[i]});   
      }   
    },
      function(){
        console.log('failure');
      }
   )
函数TimeCardViewModel(){
var self=这个;
self.teamMembers=ko.observearray();
self.addShift=ko.pureComputed(函数(){});
}
$.ajax({
类型:“职位”
url:“/…json”
}).then(函数(数据){

对于(var i=0;i,如果您正在处理这些类型的嵌套数据,您可能需要为每个元素创建viewmodels

如果我正确理解了你的结构,那么:

  • 时间卡,包含
  • 团队成员,其中包含
  • 天,其中包含
  • 移位,包含
  • 两个数字
  • 如果您为这些元素中的每一个定义了特定的对象,您就可以很好地了解计算值背后的逻辑

    例如:

    • 班次的
      totalHours
      number1+number2
    • 一天的
      totalHours
      是每个班次的
      totalHours
      总和
    • 等等
    使用以下两件事将使您受益:

    • 自动重新计算总小时数的步骤
    • 对数组中的所有值求和
    我建议看一下下面的示例,了解如何构建构成
    时间卡的元素。您可能不需要这么多的类级别,但这样更容易理解

    请注意,我没有输入任何代码来将JSON数据转换为新的viewmodel实例。如果您需要这方面的帮助,请在注释中告诉我

    函数移位(hoursA,hoursB){
    var self=这个;
    this.hoursA=ko.可观测(hoursA);
    this.hoursB=ko.可观察(hoursB);
    //计算1:当其中一个参数为“number1”时,将“number1”添加到“number2”
    //变化
    this.totalHours=ko.pureComputed(函数(){
    返回self.hoursA()+self.hoursB();
    });
    };
    功能日(初始班次){
    var self=这个;
    this.shifts=ko.observableArray(初始位移);
    //计算2:添加每个班次的“总小时数”
    this.totalHours=ko.pureComputed(函数(){
    返回self.shift().reduce(函数(结果,移位){
    返回结果+shift.totalHours();
    }, 0);
    });
    };
    功能团队成员视图模型(初始天数){
    var self=这个;
    this.days=ko.observearray(初始天数);
    //计算3:添加每天的“总小时数”
    this.totalHours=ko.pureComputed(函数(){
    返回self.days().reduce(函数(结果,天){
    返回结果+天.总小时数();
    }, 0);
    });
    };
    函数TimeCardViewModel(){
    var self=这个;
    this.teamMembers=ko.observearray();
    //计算4:为每个成员添加“totalHours”
    this.totalHours=ko.pureComputed(函数(){
    返回self.teamMembers().reduce(函数(结果,成员){
    返回结果+成员.totalHours();
    }, 0);
    });
    
    };
    如果要处理这些类型的嵌套数据,可能需要为每个元素创建viewmodels

    如果我正确理解了你的结构,那么:

  • 时间卡,包含
  • 团队成员,其中包含
  • 天,其中包含
  • 移位,包含
  • 两个数字
  • 如果您为这些元素中的每一个定义了特定的对象,您就可以很好地了解计算值背后的逻辑

    例如:

    • 班次的
      totalHours
      number1+number2
    • 一天的
      totalHours
      是每个班次的
      totalHours
      总和
    • 等等
    使用以下两件事将使您受益:

    • 自动重新计算总小时数的步骤
    • 对数组中的所有值求和
    我建议看一下下面的示例,了解如何构建构成
    时间卡的元素。您可能不需要这么多的类级别,但这样更容易理解

    请注意,我没有输入任何代码来将JSON数据转换为新的viewmodel实例。如果您需要这方面的帮助,请在注释中告诉我

    函数移位(hoursA,hoursB){
    var self=这个;
    this.hoursA=ko.可观测(hoursA);
    this.hoursB=ko.可观察(hoursB);
    //计算1:当其中一个参数为“number1”时,将“number1”添加到“number2”
    //变化
    this.totalHours=ko.pureComputed(函数(){
    返回self.hoursA()+self.hoursB();
    });
    };
    功能日(初始班次){
    var self=这个;
    this.shifts=ko.observableArray(初始位移);
    //计算2:添加每个班次的“总小时数”
    this.totalHours=ko.pureComputed(函数(){
    返回self.shift().reduce(函数(结果,移位){
    返回结果+shift.totalHours();
    }, 0);
    });
    };
    功能团队成员视图模型(初始天数){
    var self=这个;
    this.days=ko.observearray(初始天数);
    //计算3:添加每天的“总小时数”
    this.totalHours=ko.pureComputed(函数(){
    返回self.days().reduce(函数(结果,天){
    返回结果+天.总小时数();
    }, 0);
    });
    };
    函数TimeCardViewModel(){
    var self=这个;
    this.teamMembers=ko.observearray();
    //计算4:为每个成员添加“totalHours”
    this.totalHours=ko.pureComputed(函数(){
    返回self.teamMembers().reduce(函数(结果,成员){
    返回结果+成员.totalHours();
    }, 0);
    });
    
    }
    我看到你已经在一些javascript中使用了一个
    for
    循环?你是否尝试过使用其中的一个来累加数字?你能展示一下你已经尝试过的一些代码吗?我看到你已经在一些javascript中使用了
    for
    循环?你是否尝试过使用其中的一个来累加数字?可以吗显示一些您已经尝试过的代码?a