Pytanie Jak uzyskać dostęp do segmentu dynamicznego w kontrolerze w Ember.js?


Mam przykładową trasę:

this.route('client', {path: ':id'});

Mogę uzyskać dostęp do tego na mojej trasie w ten sposób:

model: function(params) {
    console.log(params.id);
}

Jak uzyskać dostęp do :id w moim kontrolerze?


11
2017-08-11 06:06


pochodzenie




Odpowiedzi:


Tak to robię w mojej aplikacji. Nie jestem pewien, czy to jest najlepsze podejście.

App.IndexRoute = Em.Route.extend({
  model: function(params) {
    this.set('params', params);
  },
  setupController: function(controller, model) {
    controller.set('params', this.get('params'));
    this._super(controller, model);
  }
});

Alternatywnie możesz również wykonać wyszukiwanie na kontenerze wewnątrz kontrolera. Ale tak naprawdę nie sądzę, że to dobre podejście. Oto przykład.

this.get('container').lookup('router:main').router.currentHandlerInfos
        .findBy('name','index').params

8
2017-08-11 06:29



Proponuję również pominięcie części setupController i po prostu zwróć Hash z haka model (). - XLII
@XLII W moim przypadku użycia musiałem również zwrócić rzeczywisty model. Użyłem więc metody setupController dla parametrów. - blessenm
YMMV, ale jeśli jest to jedyna rola setupController, możesz zrobić coś wzdłuż linii function(c,p) { return {obj: ..., params: p}; }, ale to raczej kwestia wymagań i osobistych preferencji. - XLII


Na trasie jest serializowana funkcja, z której możesz skorzystać. Tutaj jest Dokumentacja API dla tego. Jednak w twoim kontekście możesz to zrobić:

App.IndexRoute = Em.Route.extend({
  model: function(params) {
    console.log(params.client_id);
  },
  serialize: function(model){
    return { client_id : model.id };
  }
});

Daj mi znać, czy to działa!

Zauważyłem również błąd w definicji trasy. Powinno to być

this.route('client', {path: '/:client_id'});

lub

this.route('client', {path: '/client/:client_id'});

1
2017-08-11 15:33



Czy to odpowiada na pytanie? - Joshua Plicque


Właśnie natknąłem się na to pytanie, ponieważ ja też zastanawiałem się, jaki był najlepszy sposób na zrobienie tego. Wybrałem przejście przez zwracanie skrótu z modelu zamiast ustawiania parametrów na trasie.

Tak więc w twoim przypadku zrobiłbym:

model() {
  Ember.RSVP.hash({client: <get client>, id: id});
}

A następnie w kontrolerze lub szablonie mogę uzyskać dostęp do klienta przez wywołanie

model.client

i uzyskaj identyfikator dzwoniąc

model.id

Osobiście uważam, że jest to czystszy sposób uzyskiwania dostępu do identyfikatora w porównaniu z ustawianiem parametru na trasie. Oczywiście zakładam, że id nie jest już ustawiony na modelu. W przeciwnym razie całe to ćwiczenie nie ma sensu.


0
2018-04-14 16:53





Jeśli twój identyfikator jest częścią twojego modelu, możesz go pobrać z samego modelu. Na przykład, jeśli masz trasę z obiektem Bill jako modelem i ścieżką rachunków /: billId, na kontrolerze możesz go pobrać w następujący sposób:

this.get ("model"). id


0
2017-07-07 20:04