Nativescript Vue - RadListView 幽灵项目数组和错误的数据类型

如何解决Nativescript Vue - RadListView 幽灵项目数组和错误的数据类型

我正在开发一个 nativescript vue 应用程序,您可以在其中保存一笔付款和与此付款相关的 X 个人数,您可以为每个人指定一个自定义金额,当您保存所有金额时,自定义金额的总和为每个人指定的金额必须等于顶部指定的总金额。

我使用 ObservableArray 来更新界面,如我用来显示人员列表和相关字段的 RadListView 的 nativescript 文档所示。

两个问题:

  1. 当我按下按钮添加一个人时,会在 ObservableArray 中推送一个带有一些默认数据的新项目。如果我为这个新人插入一个名字和一个自定义数量,然后我按下删除按钮,ObservableArray 它会正确更新 但是当我再次按下添加人员按钮时,它会使用新的默认数据更新数组,但在RadListView 生成的接口再次插入了先前的值,这些值与 ObservableArray 中存在的值不匹配。

事实上,当我按下保存按钮时,控制台日志向我显示了一个数组,其中包含由 addPerson 函数创建的默认数据集,但在界面上,我看到字段被按下删除按钮之前插入的值所赋值。

>
  1. 按下保存按钮后,validateForm 函数会计算所有人员自定义金额的总和,如果它不等于总金额,则会显示错误对话框。似乎 ObservableArray 中第一个项目的自定义金额值(从一开始就已经存在的那个)它正确地打算作为数字,而不是插入到由 add person 函数动态生成的字段中的所有自定义金额值是用作字符串

事实上,当我按下保存按钮并计算总和时,例如 14 和 16 的总和产生的结果将是“1416”而不是 30。 我当然可以在执行求和之前将字符串转换为浮点数,但我不明白为什么需要这种解决方法。

这是完整的代码:

<template>
  <Page>  
    <GridLayout columns="*" rows="auto,auto,*,auto">

      <Label row="0" text="total amount"/>
      <TextField row="1" v-model="payment.total" keyboardType="number" @textChange="updatePrice()"/>

      <RadListView row="2" layout="linear" orientation="vertical" for="item in payment.persons">
        <v-template>
          <GridLayout columns="*" rows="*,*" class="person">
            <Label row="0" :text="'person name ' + ($index+1)" />
            <TextField row="1" v-model="item.name" />
            <Label row="2" :text="'person amountEqual ' + ($index+1)" />
            <Label row="3" :text="item.amountEqual" />
            <Label row="4" :text="'person custom amount ' + ($index+1)" />
            <TextField row="5" v-model="item.customAmount" keyboardType="number" />
            <Button row="6" text="Delete person" @tap="deletePerson($index)"/>
          </GridLayout>
        </v-template>
      </RadListView>

      <Button row="3" text="Add person" @tap="addPerson()" />
      <Button row="4" text="Save" @tap="validateForm()" />

    </GridLayout>
  </Page>
</template>

<script>

  import { ObservableArray } from 'tns-core-modules/data/observable-array';

  export default {
    data() {
      return {
        payment:{
          total:10,persons: new ObservableArray([{
            name:"test1",amountEqual:10,customAmount:10
          }])
        }
      }
    },methods:{

      updatePrice(){
        for (let index = 0; index < this.payment.persons.length; index++) {
          var equalCost = (this.payment.total / this.payment.persons._array.length).toFixed(2)
          this.updateArray(index,"amountEqual",equalCost);
        }
      },updateArray(index,property,value){
        var temp= this.payment.persons.getItem(index);
        temp[property]=value;
        this.payment.persons.setItem(index,temp);
      },addPerson(){
        this.payment.persons.push({
          name:"",amountEqual:0,customAmount:0
        });
        this.updatePrice();
      },deletePerson(index){
        this.payment.persons.splice(index,1);
        this.updatePrice();
      },validateForm(){
        var customTotal=0;

        for (let index = 0; index < this.payment.persons.length; index++) {
          var person = this.payment.persons.getItem(index);
          customTotal = customTotal + person.customAmount;
        }

        console.log(this.payment.persons);
        console.log(customTotal);

        if(this.payment.total != customTotal){
          alert({
            title: "Error",message: "The total of the custom amount of the persons is not equal to the payment total amount!",okButtonText: "OK"
          });
        }
      }
    }
  }
</script>

<style scoped>
  .person{
    margin-top:50px;
    background-color: rgb(231,231,231);
    border-radius: 10px;
    padding: 40px 10px;
    margin-bottom: 50px;
  }
</style>

感谢您的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res