2

有人可以帮忙吗?

我有这个单页应用程序来显示问题:

如果您修改一个字段,然后按顶部的“保存”,则更改的字段不会显示在控制台上...

<template>
    <Page>
        <ActionBar>
            <Label text="SAVE" @tap="saveScreen()" />
        </ActionBar>
        <StackLayout>
            <RadDataForm :source="person"/>
        </StackLayout>
  </Page>
</template>

<script>
export default {
    data () {
        return {
            person: {
                name: 'John',
                age: 23,
                email: 'john@company.com',
                city: 'New York',
                street: '5th Avenue',
                streetNumber: 11,
            },
        };
    },
    methods: {
        saveScreen() {
            console.log('=======personName: ' + JSON.stringify(this.person))
        }
    }
}
</script>
<style>
</style>

我意识到这几乎是一个基本问题,我在互联网上搜索了答案但找不到它......

在此先感谢您的帮助。问候,汉斯

4

2 回答 2

5

RadDataForm使用起来有点棘手,因为它不会自动绑定数据,因此您必须添加一些事件来获取更改的数据。
初始数据用于创建表单,并在更改时将数据保存到另一个对象,以便您可以监听propertyCommitted事件并获取editedObject.

<RadDataForm :source="person" @propertyCommitted="onPropertyCommitted" />
data() {
  return {
    person: {
      name: "John",
      age: 23,
      email: "john@company.com",
      city: "New York",
      street: "5th Avenue",
      streetNumber: 11
    },
    committedPerson: {}
  };
},
methods: {
  onPropertyCommitted (data) {
    this.committedPerson = data.object.editedObject
  },
  saveScreen () {
    console.log(this.committedPerson);
  }
}

不知道这是否是在 Vue 中执行此操作的最佳方法,但我看到 github 上有关于此的未解决问题,并且发布了一些解决方法,但没有针对 Vue。
应该在官方文档中更好地解释。

这是工作示例https://play.nativescript.org/?template=play-vue&id=98Xyjv&v=5

在这里你可以找到一些关于验证、分组等的例子。
https://github.com/telerik/nativescript-ui-samples-vue/tree/master/dataform/app/examples

于 2019-02-11T11:16:55.803 回答
0

这是我对此的回答。看看保存功能。

    <StackLayout>
            <StackLayout orientation="vertical" backgroundColor="lightgray">
             <RadDataForm 
                id="myDataForm"
                :source="record"
                 v-on:propertyCommitted="save"/>
   </StackLayout>
   <script>
    import { mapState } from 'vuex'
    import { getViewById } from "tns-core-modules/ui/core/view";
    export default {
        data() {}
        },
        methods:{
         save(){
            console.log('save')
            let data = args.object
            var dataform = getViewById(data, "myDataForm");
            console.log(dataform.editedObject)//<--updated Data Here
            }, 
        }
        computed: mapState({
        record(state){
            return record = this.$store.getters.record;
        }
     };
于 2019-11-11T18:20:36.057 回答