Ember.js: فواصل كل في على المفاتيح التي تحتوي على نقطة في الإصدار 3.8.0-beta.1

تم إنشاؤها على ٢٩ يناير ٢٠١٩  ·  25تعليقات  ·  مصدر: emberjs/ember.js

سيعود {{each-in}} undefined للقيمة التي يحتوي مفتاحها على نقطة.

هذا الخطأ غير موجود في الإصدار 3.7.2 ويظهر لأول مرة في الإصدار 3.8.0-beta.1 ولا يزال موجودًا في الإصدار 3.8.0-beta.3.

اختبار الرسوب (انخفاض في 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

التعليق الأكثر فائدة

تم الإصلاح بواسطة https://github.com/emberjs/ember.js/pull/18296

ال 25 كومينتر

jasonmit هل يمكنك إرسال

يجب علينا بالتأكيد أن نتسبب في ذلك ، لكنني لست متأكدًا من أن هذا سيعتبر خطأً في النهاية. على وجه التحديد ، سيبحث get(obj, 'hello.world') عن obj.hello.world وليس obj['hello.world'] ...

نعم ، من المؤكد تمامًا أن هذا هو السبب ، حيث يتم الحصول على كل استخدامات لذلك يعد هذا نوعًا من نسخة مكررة من الحصول على تذكرة مسار النقطة. Mayyyybe في هذه الحالة المحددة ، لسنا بحاجة إلى استخدام الدخول إلى هنا بعد هبوط حاصل ES5 لأن هذا ربما لا يعمل مع الوكلاء على أي حال؟

على وجه التحديد https://github.com/emberjs/ember.js/blob/master/packages/٪40ember/-internals/glimmer/lib/utils/iterable.ts#L128

أوافق على أنني لست متأكدًا مما إذا كان هذا يعتبر خطأ وما إذا كان إصلاح هذا الآن سيؤدي إلى مشاكل في مكان آخر أو في المستقبل

يا ، وأعتقد أننا نقوم بأشياء مختلفة بناءً على الاستدلال على الكائن الذي يتم تكراره هنا:

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

بعض هذه التكرارات تستخدم get ( ObjectIterator.fromIndexable ) والبعض الآخر لا يستخدم ( ObjectIterator.fromForEachable ، MapLikeNativeIterator.from )

نحن نبحث في fromIndexable في هذه الحالة. أعتقد أن المشكلة الوحيدة في عدم استخدام get هي pojos مع cps

chancancode - jasonmit قد Symbol.iterable

jasonmit هل يمكنك إرسال

بالتأكيد ، سأفعل ذلك الآن وأربط المشكلة.

نعم ، أنا فقط أشير إلى ذلك لأن يحل المشكلة بجعل الكائن يطبق Symbol.iterable

فكرة رائعة ، سأجرب ذلك كحل بديل.

إذا كنت مهتمًا بمعرفة سبب وجود فترات في المفتاح ، فإن المفاتيح الموجودة في الكائن التي يتم تكرارها هي سلاسل ISO (على سبيل المثال ، 2011-10-05T14:48:00.000Z ) وتلك التي لها فترات قبل UTC.

فقط أتساءل ما هو وضع هذا؟ شكرا لكم جميعا

@ amk221 لا أعتقد أن هذا قد تم حله ، فقد انتهى بنا الأمر إلى إعادة هيكلة تطبيقنا لتجنب الفترة الزمنية الرئيسية ولكن من الواضح أنه ليس حلاً مثاليًا للجميع.

مرحبًا بالجميع ، لقد قمت بعمل علاقات عامة لهذا الشخص ، وطلب مراجعة: د

أي شيء يمكنني القيام به لتحريك هذا؟ نحن حقا بحاجة إلى هذا 🤞

@ amk221 يمكنك إضافة مساعد. هكذا حللت المشكلة.
لكن توافق على أن هذا أمر بالغ الأهمية.

لقد أهدرت للتو بضع ساعات على هذا - أنا جديد جدًا على Ember وكان هذا مفاجئًا تمامًا.

بالنسبة إلى تطبيقي ، أقوم بتتبع حالة مجموعة من المضيفين ، لذلك أقوم بإدخال التجزئة بواسطة عنوان IP أو اسم المجال. لقد كانت تعود غير محددة لكل شيء باستثناء localhost وكنت أقود نفسي إلى الجنون في محاولة لمعرفة ذلك.

رعاية @ devop911 لمشاركة مساعدك 😁

@ amk221 ليس الشخص الذي تسأله ، لكن انتهى بي الأمر باستخدام هذه المجموعة:

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);

أنا فقط واجهت هذه المشكلة أيضا. أي تحديثات؟

لست متأكدًا من أنه يمكننا إصلاح هذا بدون تراجع حالة الاستخدام الشائعة لـ get . إذا تمكنا من الحصول على معيار يوضح أن الانحدار ليس سيئًا ، فمن الأفضل إضافة هذا إلى get ، ولكن إذا لم يكن الأمر كذلك ، فسنحتاج إلى إنشاء الإصلاح مباشرةً في each-in . أظن أنه سيكون تراجعًا لائقًا.

يمكننا التحقق يدويًا من الوكلاء واستخدام unknownProperty على الكائن إذا كان وكيلًا ، وإلا فإننا نستخدم صيغة get العادي تحديدًا عند تكرار كائن باستخدام each-in ، والذي قد يعمل كما هو متوقع.

لا يمكن أن تأتي الدعائم المتعقبة على المدى الطويل قريبًا بما يكفي 😩

قصة طويلة قصيرة: قم بالتبديل إلى أي شيء آخر ثم إلى Ember. لا يستحق كل هذا العناء.

@ devop911 تعليقات من هذا القبيل ليست بناءة أو مفيدة للغاية. نريد تمامًا حل هذه المشكلة ، لكننا أيضًا لا نريد تراجع الأداء في تطبيقات المستخدم لحالة حافة غير شائعة نسبيًا. إنه موقف صعب أن تكون فيه مشرفًا.

سنكتشف حلًا لهذا في الوقت المناسب ، فهو يحتاج فقط إلى مزيد من العمل أكثر من مشكلة نموذجية وقد ركزنا على ميزات الشحن لـ Octane. أوافق ، هذا مهم رغم ذلك.

تضمين التغريدة
دع المستخدمين يقررون ، كيف يسمون مفاتيحهم ، لا يمكن أن يكون حالة حافة.

pzuraq أعتقد أنه يجب أن يكون لدينا على الأقل تحذير يتم each-in يتضمن نقطة. لا يوجد حل رائع بدون إدخال الانحدارات ، فأنت على حق

@ devop911 استند تقييمي لكونها حالة متطورة إلى حقيقة أننا رأينا تقارير قليلة جدًا عن هذا الخطأ بشكل عام منذ فتح هذه المشكلة. إذا كان هذا هو السلوك الذي اعتمد عليه كل تطبيق من تطبيقات Ember ، لكان من الممكن أن يكون إصلاحًا ذا أولوية أعلى ، بالتأكيد ، ولكن يبدو أن العديد من الأشخاص لا يستخدمون فترات في مفاتيحهم.

على الجانب الآخر ، نحصل على الكثير من الشكاوى كلما تراجع الأداء. إذا لم يكن هذا مسارًا ساخنًا ، فمن المؤكد أن الإصلاح كان سيأتي في وقت أبكر كثيرًا. كما قلت ، من الصعب أن تكون مشرفًا ، خاصة عندما تحاول إنجاز الأمور 😩 سأرى ما يمكننا فعله لجعل شخص ما يعمل على هذا عاجلاً وليس آجلاً

@ rwwagner90 أعتقد أنه يمكننا إصلاح السلوك ، لذلك أفضل عدم بدء التحذير ، ولكن إذا لم نتمكن من إصلاحه ، فأنا أوافق على أنه يجب علينا تحذير المستخدمين بالتأكيد.

تم الإصلاح بواسطة https://github.com/emberjs/ember.js/pull/18296

شكرا للجميع للتوصل إلى حل ❤️

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات