Ember.js: setiap jeda pada kunci yang berisi titik di 3.8.0-beta.1

Dibuat pada 29 Jan 2019  ·  25Komentar  ·  Sumber: emberjs/ember.js

{{each-in}} akan mengembalikan undefined untuk nilai yang kuncinya berisi titik.

Bug ini tidak ada di 3.7.2 dan pertama kali muncul di 3.8.0-beta.1 dan masih ada di 3.8.0-beta.3.

Tes gagal (turun packages/@ember/-internals/glimmer/tests/integration/syntax/each-in-test.js )

[`<strong i="11">@only</strong> each-in supports keys with a period in them`]() {
  this.render(
    strip`
    <ul>
      {{#each-in categories as |_ item|}}
        <li>{{item.name}}</li>
      {{/each-in}}
    </ul>
  `,
    {
      categories: {
        // uncomment and run.  notice `items` is undefined
        'hello.world': { name: 'foo' },
        // uncomment and run.  notice it works as expected
        // hello world: { name: 'foo' },
      },
    }
  );

  // Empty
  this.assertHTML(strip`
    <ul>
      <li>foo</li>
    </ul>
  `);
}
Bug

Komentar yang paling membantu

Semua 25 komentar

@jasonmit Bisakah Anda mengirim PR dengan tes gagal?

Kami pasti harus melakukan root penyebab ini, tetapi saya tidak yakin ini akan dianggap sebagai bug pada akhirnya. Secara khusus, get(obj, 'hello.world') akan mencari obj.hello.world bukan obj['hello.world'] ...

Ya cukup yakin itulah alasannya, setiap penggunaan get jadi ini semacam duplikat tiket get dengan titik jalur. Mayyyybe dalam kasus khusus ini kita tidak perlu menggunakan get in here setelah mendaratkan getter ES5 karena ini mungkin tidak berfungsi dengan proxy?

Secara khusus https://github.com/emberjs/ember.js/blob/master/packages/%40ember/-internals/glimmer/lib/utils/iterable.ts#L128

Saya setuju Saya tidak yakin apakah ini dianggap bug dan apakah memperbaikinya sekarang akan menyebabkan masalah di tempat lain atau di masa mendatang

Ya, dan saya sebenarnya berpikir kami melakukan hal yang berbeda berdasarkan heuristik pada objek yang diiterasi di sini:

https://github.com/emberjs/ember.js/blob/7df81ec411b2da73086f63bf6a26b113dfa5a1a2/packages/%40ember/-internals/glimmer/lib/utils/iterable.ts#L290 -L298

Beberapa dari iterator tersebut menggunakan get ( ObjectIterator.fromIndexable ) dan beberapa tidak ( ObjectIterator.fromForEachable , MapLikeNativeIterator.from )

Kami melihat fromIndexable dalam kasus ini. Saya pikir satu-satunya masalah dengan tidak menggunakan get adalah pojos dengan cps

@chancancode - ya, saya hanya menunjukkannya karena @jasonmit mungkin dapat mengatasi masalah ini dengan membuat objek mengimplementasikan Symbol.iterable

@jasonmit Bisakah Anda mengirim PR dengan tes gagal?

Pastinya, saya akan melakukannya sekarang dan menautkan masalahnya.

ya, saya hanya menunjukkannya karena @jasonmit mungkin bisa mengatasi masalah ini dengan membuat objek mengimplementasikan Symbol.iterable

Ide bagus, saya akan mencobanya sebagai solusi.

Jika Anda penasaran mengapa kami memiliki titik dalam kunci, kunci dalam objek yang diiterasi adalah string ISO (yaitu, 2011-10-05T14:48:00.000Z ) dan kunci tersebut memiliki titik sebelum offset UTC.

Hanya ingin tahu status apa ini? Terima kasih semuanya

@ amk221 Saya tidak percaya ini telah diselesaikan, kami akhirnya melakukan refactoring aplikasi kami untuk menghindari titik di kunci tetapi jelas bukan solusi ideal untuk semua orang.

Hai semuanya, saya membuat PR untuk yang satu ini, meminta review: D

Ada yang bisa saya lakukan agar ini terus berlanjut? Kami sangat membutuhkan ini 🤞

@ amk221 Anda dapat menambahkan pembantu. Begitulah cara saya memecahkan Masalah.
Tapi setuju ini penting.

Hanya menyia-nyiakan beberapa jam untuk ini - saya sangat baru di Ember dan ini benar-benar mengejutkan.

Untuk aplikasi saya, saya melacak status untuk sekelompok host, jadi memasukkan hash dengan IP atau nama domain. Itu kembali tidak ditentukan untuk semuanya kecuali localhost dan saya membuat diri saya gila mencoba mencari tahu ini.

@ devop911 peduli untuk berbagi penolong Anda 😁

@ amk221 Bukan yang Anda tanyakan, tapi saya akhirnya menggunakan ini banyak:

import { helper } from '@ember/component/helper';
import _ from 'lodash';

export function hashToArray([h]) {
  return _.map(h, function(value, key) {
    return {
      key: key,
      value: value,
    }
  });
}

export default helper(hashToArray);

Saya baru saja mengenai masalah ini juga. Ada pembaruan?

Saya tidak yakin kami dapat memperbaikinya tanpa mengembalikan kasus penggunaan umum untuk get . Jika kita bisa mendapatkan patokan yang menunjukkan bahwa regresi tidak buruk, maka mungkin tidak masalah untuk menambahkan ini ke get , tetapi jika tidak, kita perlu membuat perbaikan langsung ke each-in . Saya menduga itu akan menjadi regresi yang layak.

Kita dapat memeriksa proxy secara manual dan menggunakan unknownProperty pada objek jika itu adalah proxy, dan sebaliknya menggunakan sintaks get normal khususnya saat mengulang objek menggunakan each-in , yang mungkin berfungsi seperti yang diharapkan.

Alat peraga terlacak jangka panjang tidak bisa segera hadir 😩

Singkat cerita: Beralih ke hal lain selain Ember. Tidak sepadan dengan semua masalahnya.

@ devop911 komentar seperti itu tidak super konstruktif atau bermanfaat. Kami benar-benar ingin menyelesaikan masalah ini, tetapi kami juga tidak ingin menurunkan kinerja dalam aplikasi pengguna untuk kasus tepi yang relatif tidak umum. Ini adalah situasi yang sulit untuk menjadi pengelola.

Kami akan mencari cara memperbaikinya tepat waktu, ini hanya membutuhkan sedikit lebih banyak pekerjaan daripada masalah biasa dan kami telah fokus pada fitur pengiriman untuk Octane. Saya setuju, ini penting.

@pengen
Biarkan pengguna memutuskan, bagaimana memberi nama kunci mereka, tidak akan pernah menjadi kasus tepi.

@pzuraq Saya pikir kita setidaknya harus memiliki peringatan yang dilemparkan jika kunci each-in menyertakan titik. Tidak ada solusi hebat tanpa memperkenalkan regresi, Anda benar

@ Devop911 penilaian saya tentang kasus tepi didasarkan pada fakta bahwa kami telah melihat sangat sedikit laporan bug ini secara keseluruhan sejak masalah ini dibuka. Jika ini adalah perilaku yang diandalkan setiap aplikasi Ember, itu akan menjadi perbaikan prioritas yang lebih tinggi, tentu saja, tetapi tampaknya tidak banyak orang yang menggunakan titik di kunci mereka.

Di sisi lain, kami _do_ mendapatkan banyak keluhan setiap kali kami menurunkan kinerja. Jika ini bukan jalur yang panas, perbaikan pasti akan datang jauh lebih awal. Seperti yang saya katakan, ini adalah situasi yang sulit untuk menjadi pengelola, terutama ketika Anda mencoba menyelesaikan sesuatu 😩 Saya akan melihat apa yang bisa kita lakukan untuk membuat seseorang mengerjakan ini lebih cepat daripada nanti

@ rwwagner90 Saya rasa kita bisa memperbaiki perilakunya, jadi saya lebih suka tidak memulai peringatan, tapi jika kita tidak bisa memperbaikinya saya setuju kita harus memperingatkan pengguna.

Terima kasih semuanya telah datang dengan solusi ❤️

Apakah halaman ini membantu?
0 / 5 - 0 peringkat