Closed sedovalx closed 9 years ago
@sedovalx при использовании такого маршрута cashier-list.cars.car.rents появляется ошибка на строчке: let carId = transition.params.cashier-list.cars.car.car_id; вот такая: routes/cashier-list/cars/car/rents/new.js: line 13, col 43, 'list' is not defined.
я так понимаю, что проблема именно в имени через "-".
весь файл, в котором ошибка:
import ProtectedRoute from "client/routes/base/protected";
import DirtyRouteMixin from "client/routes/base/dirty-route-mixin";
export default ProtectedRoute.extend(DirtyRouteMixin, {
setupController: function(controller, model) {
this.controllerFor('rents.new').set('model', model);
},
renderTemplate: function() {
this.render('rents.new');
},
model: function(params, transition){
let rent = this.store.createRecord("rent");
let carId = transition.params.cashier-list.cars.car.car_id;
//let accountType = params.accountType;
return this.store.find("car", carId).then(car => {
rent.set("car", car);
//operation.set("accountType",accountType);
return rent;
});
}
});
можешь что-нибудь посоветовать?
router у меня такой:
this.resource("cashier-list", function() {
this.resource("cashier-list.cars",{ path: "cars" }, function(){
this.resource("cashier-list.cars.car", { path: "/:car_id" }, function() {
this.resource("cashier-list.cars.car.rents",{ path: "rents" }, function(){
this.route("new");
});
});
});
});
взял отсюда про маршруты через точку: http://stackoverflow.com/questions/14923942/how-do-i-disambiguate-nested-routes-in-ember-js
это чтобы избежать двух маршрутов rents.new
Можно поставить брейкпоинт в вызов метода model
и посмотреть на transaction.params
. К свойству, которое содержит в себе невалидные символы, можно обращаться с таким синтаксисом: transaction.params["cashier-list"]
. Нужно помнить, что в JS любой объект - это ассоциативный массив, т.е. obj.myProp - это то же самое, что и obj["myProp"].
@sedovalx Я так и делал, чтобы все проверить. до 16 шага не доходит, на 14 выпадает с ошибкой ошибка такая: Error while processing route: cashier-list.cars.car.rents.new Cannot read property 'car' of undefined TypeError: Cannot read property 'car' of undefined хотя на скрине видно, что там есть
let carId = transition.params["cashier-list.cars.car"].car_id; так то же самое
Молодец, что сообразил про вариант с transition.params["cashier-list.cars.car"]
, но вот только в этом случае не может быть такой же ошибки. Что-то ты не договариваешь.
похоже, что это место все же работает, но не работает подстановка другого шаблона и контроллера, на выходе как будто вообще нет такого маршрута. url меняется и все. ни ошибок, ничего.
@Argelein неужели отступишь? ;)
ember debug пробовал? С точками маршруты я пока не вкуривал, другим занят. Но эта штука с переиспользованием контроллера вроде должна работать, как ожидается.
@sedovalx да, наверняка работает, просто неясно, как ее правильно задать... да еще эта штука менялась с версиями
Входит в план-минимум #95
@sedovalx у меня получилось, но есть проблема. При переходе по маршруту, машина зполняется автоматически, но в форме она не отображается. ВЫглядит так: Я заполнил водителя и залог вручную и сохраняить работает после этого.
Мне кажется, что проблема в том, что свойство carDisplayName модели rent не совпадает с свойством displayName модели car. Там с сервера приходит string в обоих случаях, но формат разный, с нулями и без. Еще кое-где влезают скобки фигурные, но я не готов сказать, в каких случаях, надо внимательнее смотреть.
Получилось переиспользовать контроллер и шаблон? Круто! Что было не так?
Да, получилось. Я не уверен, что я делал не так. Я не стал делать unshelve, начал заново и все получилось. Но по-моему, в документации все же неверно указано, т.к. там путь к маршруту наследует вешестоящие ресурсы, а я сделал без наследывания и сработало. Может непонятно, что я имею ввиду, могу попозже с примером написать, если интересно.
Я эту задачу закрою. На разность displayName заведу отдельную задачу для сервера.
Путь к маршруту наследует вышестоящие ресурсы, если определен через route. Если же через resource, то не наследует, как бы глубоко он не сидел.
В кассовой форме нужна кнопка создания новой аренды для выбранной машины. Машина при этом должна быть свободной, иначе кнопка неактивна. При нажатии на кнопку должен открываться мастер аренды. Путь $/cashier-list/cars/12/rents/new. При этом не нужно заводить отдельные шаблоны и контроллеры для этого. Можно использовать уже существующие, указав их в маршруте - смотри документацию .