Ember.js: Suntikkan ke dalam pembantu

Dibuat pada 4 Mei 2015  ·  6Komentar  ·  Sumber: emberjs/ember.js

Aku punya ini:

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

melihat:

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

tetapi di helper, this.get('applicationController') tidak didefinisikan:

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

Dalam dokumen dikatakan Anda dapat menyuntikkan ke pembantu, dan pengaturan yang tepat ini bekerja pada kelas kerangka kerja lain tetapi tidak di sini ...

Komentar yang paling membantu

Bagi siapa pun yang menemukan ini nanti, helper di Ember 2.x sekarang menjadi objek "nyata" dan dapat memiliki akses ke layanan (melalui Ember.inject.service atau injeksi berbasis penginisialisasi).

Contoh:

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

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

Semua 6 komentar

Anda tidak dapat menyuntikkan ke pembantu. Saya yakin bahwa dokumen telah diperbarui, tetapi tolong arahkan saya ke tempat yang Anda perhatikan yang disebutkan bahwa ini mungkin sehingga kami dapat memperbaiki dokumen...

Ah sial, Anda memang memperbaruinya untuk 1.11. Terima kasih. Oke, lalu apa arah yang harus kita tuju jika kita memerlukan akses ke barang-barang kontainer dari dalam helper dan terutama instance Ember.Object biasa (yang tidak memiliki properti container)?

@atomkirk Alih-alih mencoba menyuntikkan sesuatu ke pembantu, Anda harus menyuntikkan ke pengontrol/komponen dan meneruskan objek yang disuntikkan ke pembantu (atau cukup gunakan properti yang dihitung). Atau cukup gunakan komponen alih-alih pembantu.

Bagaimana jika saya menggunakan komponen pembantu di dalam dan saya perlu mengakses data pengguna juga yang biasanya saya suntikkan ke rute dan pengontrol? Itu tidak dapat diakses di dalam pembantu itu.
Mengirimkannya ke setiap komponen tampaknya tidak efisien, saya perlu membuat misalnya nama pengguna untuk setiap komponen, sementara itu sama untuk semuanya. Jadi jika saya memiliki 50 komponen, saya harus memberikan nilai yang sama ke 50 komponen untuk mengaksesnya dari pembantu di dalam komponen...
Adakah cara untuk menyelesaikan ini?

Bagi siapa pun yang menemukan ini nanti, helper di Ember 2.x sekarang menjadi objek "nyata" dan dapat memiliki akses ke layanan (melalui Ember.inject.service atau injeksi berbasis penginisialisasi).

Contoh:

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

  compute(params, hash) {
    let i18n = this.get('i18n');
    // stuff here
  }
});
Apakah halaman ini membantu?
0 / 5 - 0 peringkat