Ember.js: حقن في مساعد

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

لدي هذا:

export function initialize(container, application) {
    application.inject('component', 'store', 'store:main');
    application.inject('component', 'application', 'application:main');
    application.inject('component', 'applicationController', 'controller:application');
    application.inject('helper', 'applicationController', 'controller:application');
    application.inject('model:device', 'application', 'application:main');
    application.inject('model:room', 'application', 'application:main');
    application.inject('model:setting', 'application', 'application:main');
    application.inject('route:application', 'application', 'application:main');
    application.inject('transform', 'application', 'application:main');
}

export default {
  name: 'injections',
  initialize: initialize
};

تنويه:

application.inject('helper', 'applicationController', 'controller:application');

لكن في المساعد ، لم يتم تعريف this.get('applicationController') :

import Ember from 'ember';
import environment from '../utils/environment';

export function staticImg(path, options) {
    if (path) {
        var staticRoot = this.get('applicationController').get('model.staticRoot');
        return new Ember.Handlebars.SafeString('<img src="' + environment.staticHost() + staticRoot + path + '" class="' + ( options.hash.classNames || "" ) + '">');
    }
    else {
        return "";
    }
}

export default Ember.Handlebars.makeBoundHelper(staticImg);

في المستندات تقول أنه يمكنك الحقن في المساعدين ، وهذا الإعداد الدقيق يعمل على فئات إطار عمل أخرى ولكن ليس هنا ...

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

بالنسبة لأي شخص يتعرف على هذا لاحقًا ، فإن المساعدين في Ember 2.x هم الآن كائنات "حقيقية" ويمكنهم الوصول إلى الخدمات (عبر Ember.inject.service أو الحقن القائمة على التهيئة).

مثال:

export default Ember.Helper.extend({
  i18n: Ember.inject.service('i18n'),

  compute(params, hash) {
    let i18n = this.get('i18n');
    // stuff here
  }
});

ال 6 كومينتر

لا يمكنك حقن المساعدين. أعتقد أنه تم تحديث المستندات ، ولكن يرجى توجيهي إلى حيث لاحظت أنه قد تم ذكر أن هذا كان ممكنًا حتى نتمكن من إصلاح المستند ...

آه يا ​​تافه ، لقد قمت بتحديثهم لـ 1.11. شكرا. حسنًا ، ما هو الاتجاه الذي يجب أن نسلكه إذا احتجنا إلى الوصول إلى مواد الحاوية من داخل المساعدين وخاصة حالات Ember.Object البسيطة (التي لا تحتوي على خاصية حاوية)؟

atomkirk بدلاً من محاولة حقن شيء ما في المساعد ، يجب عليك حقنه في وحدة تحكم / مكون وتمرير الكائن المحقون إلى المساعد (أو استخدم خاصية محسوبة فقط). أو استخدم مكونًا بدلاً من المساعد.

ماذا لو كنت أستخدم المساعد داخل المكون وأحتاج إلى الوصول إلى بيانات المستخدم أيضًا التي أقوم عادةً بحقنها في المسارات ووحدات التحكم؟ لا يمكن الوصول إليه من داخل هذا المساعد.
يبدو أن تمريره إلى كل مكون غير فعال ، سأحتاج إلى إنشاء user.name على سبيل المثال لكل مكون ، بينما هو نفسه بالنسبة لكل مكون. لذلك إذا كان لدي 50 مكونًا ، فسوف أحتاج إلى تمرير نفس القيمة إلى 50 مكونًا للوصول إليها من المساعد داخل المكون ...
أي طريقة لحل هذا؟

تمت معالجة ذلك في Ember.js 1.13 مع إجراءات الإغلاق. لطفا أنظر:

بالنسبة لأي شخص يتعرف على هذا لاحقًا ، فإن المساعدين في Ember 2.x هم الآن كائنات "حقيقية" ويمكنهم الوصول إلى الخدمات (عبر Ember.inject.service أو الحقن القائمة على التهيئة).

مثال:

export default Ember.Helper.extend({
  i18n: Ember.inject.service('i18n'),

  compute(params, hash) {
    let i18n = this.get('i18n');
    // stuff here
  }
});
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات