Ember.js: يتم تحويل معلمات الاستعلام ذات القيم الخالية أو غير المحددة إلى سلاسل في سلاسل

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

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

_ في حال وجد أي شخص ذلك عبر Google ._

تم حل المشكلة بشكل أساسي ، ولكن تظل حالة الحافة حيث إذا لم يتم تعيين معلمة الاستعلام على وحدة التحكم ، فستتسلسل null إلى 'null' .

var AnimalsController = Ember.Controller.extend({

  queryParams: ['myCat']
  // myCat: null // deliberately not set, to illustrate the issue

});

export default AnimalsController;

ال 21 كومينتر

شكرا denisnazarov لتتبع هذا واحد.

بينغ سينور @ ماتشتي

machty يمكننا استخدام مساعدتك في هذا الأمر

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

App.MyController = Ember.Controller.extend({
  queryParams: ['filters'],
  filters: ['starred']
});

إذا قمت بتعيين filters إلى null وقمت بتحديث الصفحة ، فما هو السلوك المتوقع؟ إذا لم تقم بتجميع null في عنوان url ، فسيتم تعيين خاصية وحدة التحكم على قيمتها الافتراضية.

هذا مشابه لمشكلة التطبيق السابق التي كانت غامضة بين القيم الخاطئة والقيمة الفعلية للخطأ. الآن يبدو الأمر غامضًا بين defaultValue و null أو undefined .

إليك مثال آخر باستخدام معلمات الاستعلام المنطقية: http://emberjs.jsbin.com/hamev/2/edit

إذا تم تعيين القيمة الافتراضية على null ، فإن تعيينها على true أو false يعينها بالفعل على إصدار السلسلة ، 'true' أو 'false' .

HeroicEric إذن ما السبب المقنع null إذا كان في حياته سيكون هو true / false ؟

قد يكون هذا خطأ. أشعر بالفضول فقط لمعرفة ماهية حالات الاستخدام لجميع حالات ركن التسلسل هذه.

machty حاولت إظهار مثال لحالة الاستخدام في jsbin.

على سبيل المثال ، أعرض قائمة بالمستخدمين وأريد أن أكون قادرًا على تصفيتهم بحيث تحتوي القائمة على كل المستخدمين أو المستخدمين المسؤولين أو المستخدمين غير المسؤولين. عندما أرغب في رؤية جميع المستخدمين ، سأقوم في الأساس بإزالة الفلتر.

هل مثل هذه المواقف ليست ما تعنيه معلمات الاستعلام؟

من الناحية المثالية ، ستكون عناوين URL شيئًا من هذا القبيل:

/ يظهر
/ المستخدمين؟ admin = true يظهر جميع المسؤولين
/ المستخدمين؟ admin = false يظهر جميع المستخدمين الذين ليسوا مشرفين

HeroicEricmachty أعتقد أن الفكرة كانت أنه إذا كان القيمة_الافتراضية على وحدة تحكم لم يتم تعريف ( null أو undefined ) أنه الافتراضي إلى استخدام السلاسل. هذا من شأنه أن يفسر لماذا ينتهي الأمر true و false كإصدارات سلسلة منذ أن يتم تعيين التسلسل افتراضيًا إلى السلاسل.

أعتقد أنه إذا كنت تريد تعيين خاصية على null فنحن بحاجة إلى الحصول على النوع من مكان آخر. machty هل سيكون هذا سببًا جيدًا queryParams على المسار؟

إذا كان لدينا هذا ، فيمكنك تعيين النوع كـ 'boolean 'وتعيين الافتراضي إلى null .

لدي مثال JSBin هذا ، وأتساءل عما إذا كان ما أراه مرتبطًا بهذه المشكلة:

http://jsbin.com/dipajezi/1/edit

في الأساس، ولدي هذا foo استعلام المعلمات مع null القيمة الافتراضية، وأول مرة يتم استدعاء لي هوك نموذج عند بدء تشغيل التطبيق، قيمة المعلمة null . عندما تكون قيمة المعلمة null ، لا أريد استخدام هذه المعلمة للاستعلام عن الخادم ، لأنها تعني "لا قيمة".

الاستعلام: ?page=1

عندما أنقر على زر NextPage ، أنقل مرة أخرى ولكن هذه المرة قمت بتغيير معامل الاستعلام page . هذه المرة تحتوي معلمة الاستعلام foo على قيمة سلسلة "null" ، وهو نوع غريب. في هذه الحالة ، ما زلت أرغب في الحصول على قيمة null ، حتى أتمكن بسهولة من التحقق من أن المعلمة ليس لها قيمة.

الاستعلام: ?page=1 وليس ?page=1&foo=null

أخيرًا ، عندما أنقر على الزر ChangeFoo ، أقوم بالانتقال مرة أخرى ، هذه المرة معيّنة قيمة معلمة الاستعلام foo لأي قيمة. الآن بما أن القيمة ليست فارغة ، يمكنني استخدام هذه القيمة لإنشاء سلسلة الاستعلام الخاصة بي.

الاستعلام ?page=1&foo=3

raytiley كتب للتو ملاحظة على https://github.com/raytiley/ember.js/commit/26a3f8569edb58f8644ce4f9cec7000276c327a6#diff -0631ecfe6138cf2c2eb2d94369c3e846R1640.

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

خلاف ذلك ، إذا كنت تريد اجتياز QPs التي تحتوي على قيم فقط ، فعليك أن تفعل params.myQP && params.myQp !== "null" ..

أعتقد أن هذا قديم ولكن سيتم إعادة فتحه إذا تمكن شخص ما من إظهار المشكلة في JSBin الذي يستخدم ember.js التالي: http://s3.amazonaws.com/machty/to_s3_uploads/ember-9fbe6c2a-c124-5c2e-0414 -f5ed36c2a1a2.js

_ في حال وجد أي شخص ذلك عبر Google ._

تم حل المشكلة بشكل أساسي ، ولكن تظل حالة الحافة حيث إذا لم يتم تعيين معلمة الاستعلام على وحدة التحكم ، فستتسلسل null إلى 'null' .

var AnimalsController = Ember.Controller.extend({

  queryParams: ['myCat']
  // myCat: null // deliberately not set, to illustrate the issue

});

export default AnimalsController;

فيما يتعلق بحالة استخدام

export default Ember.Controller.extend({
  queryParams: [{ 
     redevelopment: { 
         type: 'boolean' 
     } 
  }],
  redevelopment: null
});

عمل ember: https://ember-twiddle.com/3afa1091106a91ce2c1734ae2998bc3f؟openFiles=controllers.application.js٪2C&route=٪2F٪3Fredevelopment٪3Dtrue

منذ متى تسمح QPs بتحديد النوع؟ أم أنك تقترح فقط واجهة برمجة تطبيقات جديدة؟

يبدو أنه غير موثق. بالنظر هنا ، يبدو أنه يمكن تجاوزه.

اوه هذا لطيف!

شكرًا ، allthesignals ، إنه مفيد جدًا

ماذا عن هذا الحل؟

{ key: undefined } إلى ? _ (غير مشمول) _
{ key: null } إلى ?key
{ key: '' } إلى ?key=
{ key: 'null' } إلى ?key=null

قائمة جيدة!

سأصوت لهذا:
{ key: undefined } إلى [nothing] _ (غير مشمول) _
{ key: null } إلى [nothing] _ (غير مشمول) _
{ key: '' } إلى ?key
{ key: 'null' } إلى ?key=null

وربما أيضًا:

{ key: false } إلى [nothing] _ (غير مشمول) _
{ key: true } إلى ?key

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