Vux: popup-picker gagal menambahkan opsi secara dinamis

Dibuat pada 19 Mei 2016  ·  27Komentar  ·  Sumber: airyland/vux

Versi: kapan

0.0.117

Android atau iOS, browser yang mana?

krom

Kode Anda

<popup-picker  :data="cities" :columns="2" :value.sync="value4" show-name></popup-picker>
动态添加选项
this.cities.push({
        name: '广东',
        value: '广东',
        parent: 0
      })
      this.cities.push({
        name: '广州',
        value: '广州',
        parent: '广东'
      })

Perilaku yang diharapkan dan perilaku yang sebenarnya.

Logging dapat melihat bahwa data dalam daftar sudah benar, tetapi tidak dapat ditampilkan.

Langkah-langkah untuk mereproduksi masalah

High Priority

Komentar yang paling membantu

@airyland Dalam desain sistem saya, umumnya adalah tipe data kunci/nilai. Solusi saya saat ini adalah menampilkan opsi melalui popup/selector, tetapi saya merasa bahwa popup-picker lebih ramah, tetapi saat ini popup-picker adalah Kunci/dukungan nilai adalah tidak terlalu ramah

Semua 27 komentar

Setel ulang dan render penggulung mungkin berguna

Apa sebenarnya yang harus dilakukan
@airyland Saya melihat kode sumber. Data kolom di pemilih seharusnya hanya dihasilkan selama fase dibuat, jadi perubahan selanjutnya tidak merespons. Semoga membantu Anda.

vux/src/components/picker/index.vue:

  created () {
    if (this.columns !== 0) {
      const length = this.columns
      this.store = new Manager(this.data, length)
      this.data = this.store.getColumns(this.value)
    }
  },

@VinceXie diterima, biarkan saya memeriksa

@airyland masih memiliki bug.
Sekarang tersedia untuk menambahkan data ke larik data yang diinisialisasi, tetapi jika data menunjuk ke larik lain, kesalahan akan terjadi. Saya menduga bahwa menghapus data di dalamnya juga akan membuat kesalahan.

value2name.js:line 11      Uncaught TypeError: Cannot read property 'name' of undefined

Alasan: Karena nilai telah ditetapkan sebagai nilai default setelah inisialisasi, dan kemudian data menunjuk ke larik baru atau menghapus nilai default, nilai nilai tidak dapat menemukan data yang sesuai dengan data dan terjadi kesalahan

Solusi: Setelah setiap perubahan data, nilai menelusuri ulang data untuk melihat apakah data yang sesuai dapat ditemukan. Jika tidak ditemukan, tetapkan nilai default lagi.

Berharap untuk segera memperbaikinya. Terima kasih.

@VinceXie Apakah Anda menarik kode untuk pengujian? Berikan demo untuk direproduksi

Saya mengujinya pada proyek saya sendiri. Anda dapat mereproduksinya dengan menambahkan kode berikut ke komponen https://github.com/airyland/vux/blob/master/src/demos/Popup-picker.vue :

ready () {
    this.list3 = [{
        name: 'a',
        value: 'a',
        parent: 0
      }, {
        name: 'b',
        value: 'b',
        parent: 0
      }, {
        name: 'c',
        value: 'c',
        parent: 'a'
      }, {
        name: 'd',
        value: 'd',
        parent: 'b'
      }]
}

Tetapkan ulang nilai ke larik data, dan data tidak akan ditemukan dan diciutkan.

Apakah Anda yakin telah melakukan uji kode pengembangan? Versi ini belum dirilis.

Yang saya tarik adalah 0,0.117, lalu saya tarik kode pengembangan terbaru untuk mengujinya.

Anda dapat mencoba lagi ketika saya mengirim versi dev dari paket npm, saya pikir Anda mengkloning tes kode.

Tetapi kode pemilih saya disinkronkan secara manual ke yang terbaru

Biarkan saya memberi tahu Anda tentang versi dev.

@airyland saya cabut sha1 versi terbaru di master yaitu e33b17682f7806aaa285ab207a4597bf10244a61 dan menambahkan kode di atas, dan bug masih muncul kembali.
src/demos/Popup-picker.vue

<template>
  <div>
    <group title="single column">
      <popup-picker :title="title1" :data="list1" :value.sync="value1"></popup-picker>
    </group>
    <br>
    <div class="picker-buttons">
      <x-button type="primary" @click="changeList10">重新赋值列表</x-button>
      <x-button type="primary" @click="changeList11">push方式更改列表</x-button>
    </div>
    <group title="double columns">
      <popup-picker :title="title2" :data="list2" :value.sync="value2"></popup-picker>
    </group>
    <br>

    <group title="chained columns">
      <popup-picker :title="title3" :data="list3" :columns="3" :value.sync="value3"></popup-picker>
      <popup-picker :title="title4" :data="list3" :columns="3" :value.sync="value4" show-name></popup-picker>
    </group>

    <br>
    <div class="picker-buttons">
      <x-button type="primary" @click="changeList21">push方式更改列表</x-button>
    </div>

  </div>
</template>

<script>
import { PopupPicker, Group, Picker, XButton } from '../components'

export default {
  ready () {
//    console.log(this.list3)
    this.list3 = [{
      name: 'a',
      value: 'a',
      parent: 0
    }, {
      name: 'b',
      value: 'b',
      parent: 0
    }, {
      name: 'c',
      value: 'c',
      parent: 'a'
    }, {
      name: 'd',
      value: 'd',
      parent: 'b'
    }]
  },
  components: {
    PopupPicker,
    Group,
    Picker,
    XButton
  },
  methods: {
    changeList10 () {
      this.list1 = [['小米1', 'iPhone1', '华为1', '情怀1', '三星1', '其他1', '不告诉你1']]
    },
    changeList11 () {
      this.list1[0].push('我是push条目')
    },
    changeList20 () {

    },
    changeList21 () {
      this.list3.push({
        name: '美国002_007',
        value: '0007',
        parent: 'usa002'
      })
    }
  },
  data () {
    return {
      title1: '手机机型',
      title2: '详细机型',
      title3: '联动显示值',
      title4: '联动显示文字',
      list1: [['小米', 'iPhone', '华为', '情怀', '三星', '其他', '不告诉你']],
      list2: [['小米', 'iPhone', '华为', '情怀', '三星', '其他', '不告诉你'], ['小米1', 'iPhone2', '华为3', '情怀4', '三星5', '其他6', '不告诉你7']],
      list3: [{
        name: '中国',
        value: 'china',
        parent: 0
      }, {
        name: '美国',
        value: 'USA',
        parent: 0
      }, {
        name: '广东',
        value: 'china001',
        parent: 'china'
      }, {
        name: '广西',
        value: 'china002',
        parent: 'china'
      }, {
        name: '美国001',
        value: 'usa001',
        parent: 'USA'
      }, {
        name: '美国002',
        value: 'usa002',
        parent: 'USA'
      }, {
        name: '广州',
        value: 'gz',
        parent: 'china001'
      }, {
        name: '深圳',
        value: 'sz',
        parent: 'china001'
      }, {
        name: '广西001',
        value: 'gx001',
        parent: 'china002'
      }, {
        name: '广西002',
        value: 'gx002',
        parent: 'china002'
      }, {
        name: '美国001_001',
        value: '0003',
        parent: 'usa001'
      }, {
        name: '美国001_002',
        value: '0004',
        parent: 'usa001'
      }, {
        name: '美国002_001',
        value: '0005',
        parent: 'usa002'
      }, {
        name: '美国002_002',
        value: '0006',
        parent: 'usa002'
      }],
      value1: ['iPhone'],
      value2: ['iPhone', '华为3'],
      value3: [],
      value4: []
    }
  }
}
</script>

<style scoped>
.picker-buttons {
  margin: 0 15px;
}
</style>

Tampaknya itu bukan masalah yang mendasari Picker, tetapi masalah pemetik popup yang mengonversi kunci dan nilai. Tidak ada waktu untuk menanganinya untuk sementara waktu, dan Anda dapat mengirim PR ketika Anda punya waktu.

Dan sepertinya ada masalah dengan pembatalan, setelah pembatalan, nilainya masih berubah.

@transtone telah diperbaiki. Tunggu rilisnya.

@airyland Kapan fungsi penugasan dinamis ini akan diselesaikan?

Versi: kapan

0.1.2

Android atau iOS, browser yang mana?

krom

Kode Anda

## Komponen

## metode
this.list4 = [{ nama:'EE', nilai: 4, induk: 0 },
{nama:'FF', nilai: 5, induk: 0 },
{nama:'GG', nilai: 6, induk: 0 }]
## Pesan eror
Tidak dapat membaca 'nama' properti yang tidak ditentukan

@liu7923032 Apa nilai default list4?

list4: [{ nama: 'AA', nilai: 0, induk: 0 },
{ nama: 'BB', nilai: 1, induk: 0 },
{ nama: 'cc', nilai: 2, induk: 0 }]

Berapa nilai defaultnya?

@airyland default ke array kosong[]

@airyland Dalam desain sistem saya, umumnya adalah tipe data kunci/nilai. Solusi saya saat ini adalah menampilkan opsi melalui popup/selector, tetapi saya merasa bahwa popup-picker lebih ramah, tetapi saat ini popup-picker adalah Kunci/dukungan nilai adalah tidak terlalu ramah

Mengutip komponen picker, import Picker from 'vux/dist/components/picker components: {Picker} terus melaporkan kesalahan Uncaught TypeError: Cannot read property'length' of undefined, picker hanya memiliki satu atribut judul picker(title="闹钟时间") , ini karena versi "version": " 0.1.2 "Apakah ada masalah?"

@kevinlvhsl saya juga mengalami masalah ini

@Baiang harus diberi nilai awal yang dipilih.Saya merasa masalah ini harus diperbaiki. Ketika tidak ada nilai awal yang dipilih, item pertama digunakan secara default

Dokumentasi untuk komponen ini tampaknya tidak tersedia tetapi hanya demo.
Jika atribut kolom tidak ditambahkan, data struktur nama-nilai tidak didukung.
Harapan untuk dapat mendukung, sebagian besar persyaratan umumnya sesuai dengan nilai dan konten yang ditampilkan.

Saya pikir saya memperbaikinya, akhirnya ..
https://vux.li/#!/issue/189

jelek :)
impor peta dari 'array-map'
impor temukan dari 'array-find'

ekspor fungsi default (nilai, daftar, pembatas) {
jika (!pembatas) {
pembatas = ' '
}
biarkan rs = peta(nilai, (satu, indeks) => {
if (list.length && Object.prototype.toString.call(list[0]) === '[Object Array]') {
kembali temukan(daftar[indeks], item => {
kembalikan item.nilai === satu
})
} lain {
kembali temukan(daftar, item => {
kembalikan item.nilai === satu
})
}
})
kembalikan peta(rs, satu => {
if (typeof one === 'undefined' || !one.hasOwnProperty('name')) {
kembali nol
}
kembali satu.nama
}).join(pembatas).ganti('--', '')
}

Apakah halaman ini membantu?
0 / 5 - 0 peringkat