2013-08-13 2 views
1

Я хочу {{linkTo}} по /activities/:user/:by_date маршруту:linkTo не подбирая параметры

this.resource('activities', { path: '/activities' }, function() { 
    this.route('by_date', {path: '/:user/:by_date'}); 
}); 

Если я сразу положить параметры в URL контроллер ведет себя правильно, и я просто хочу, чтобы мой шаблон приложения к linkTo этот URL с разумной hardcoded набор значений для этих параметров. Я пытаюсь сделать это, установив переменную экземпляра в ApplicationController:

activityDefaults: {user:1, by_date:"2013-07-01"} 

Я думаю, уже в linkTo в шаблоне приложения:

{{#linkTo "activities.by_date" activityDefaults}}Activities{{/linkTo}} 

К сожалению, это не работает, решение URL для :

/activities/undefined/undefined 

Любая помощь будет оценена по достоинству.

- = - = - = - = - = - = - = - = - = - = ОБНОВЛЕНИЕ - = - = - = - = - = - = - = - = - = - =

Я «ве попытался сделать в activityDefaults объект Ember:

module.exports = activityDefaults = Ember.Object.create({ 
    user_id: 1, 
    by_date: "2012-07-12" 
}); 

а потом я добавил сериалайзер к ActivitiesByDateController:

serialize: function(model) { 
    return { 
     user_id: model.get('user_id'), 
     by_date: model.get('by_date') 
    }; 
} 

{{linkTo}} еще не работает, но есть тонкие различия. Наведите указатель мыши на ссылку, в которой вы больше не видите URL-адрес за пределами базового URL-адреса (примечание: до того, как оно было /activities/undefined/undefined). Кроме того, при нажатии на ссылке он посылает следующее сообщение на консоль браузера:

Это linkTo находится в неактивном состоянии нагрузки, потому что по крайней мере один из его параметров в настоящее время имеет нулевое/неопределенное значение, или прилагаемый имя маршрута недействительно.

Примечание: я меняла непоследовательное использование on_date/by_date быть последовательно используя by_date именования. Я немного расплывчатый, когда Ember преобразует подчеркнутые переменные и преобразует их в camelCase. Я не думаю, что я сталкиваюсь с этим, но это заставляет меня задуматься.

ответ

0

Вы должны подключить в функцию serialize и обеспечиваете динамические сегменты ваших потребности разрешения URL (предполагается, что user_id и on_date являются свойством, доступным на вашей Activity модели):

App.ActivitiesByDateRoute = Ember.Route.extend({ 
    ... 
    serialize: function(model) { 
    return { 
     user_id: model.get('user_id'), 
     on_date: model.get('on_date') 
    }; 
    } 
}); 

Тогда предполагающим дальше у вас есть, где ваш linkTo помощника живет activity как модель доступна, она будет выглядеть следующим образом:

{{#linkTo "activities.by_date" activity}}Activities{{/linkTo}} 

Также стоит упомянуть, что если вы назовете свой маршрут on_date, вы должны указать свой шаблон таким же образом или наоборот. Ember много работает с соглашениями, и если вы не хотите, чтобы в какой-то момент вы столкнулись с неприятными ошибками, вы должны быть совместимы с именами в своем приложении.

Это говорит, IMO, вы должны переименовать свой маршрут в маршрутизаторе карты также by_date динамический сегмент может иметь другое название, так как вы собираетесь забрать его в serialize крючок позже.

this.resource('activities', { path: '/activities' }, function() { 
    this.route('by_date', {path: '/:user/:on_date'}); 
}); 

Если вы где теперь просят «как он знает, что мой маршрут называется ActivitiesByDateRoute Я видел это по другому вашему вопросу :)

Надеюсь, это поможет.

+1

LOL. Да, я начал с соглашения ByDate, а затем стал лучше любить OnDate. Я всегда собирался сделать их последовательными, но не понял, что это может на самом деле вызвать проблемы из-за предположений о присвоении именования со стороны Эмбера. Думаю, еще одна причина быть последовательной. – ken

+0

Кстати, я попробовал метод 'serialize', но это не сработало для меня. Первоначально я думал, что это потому, что 'activityDefaults' не является объектом Ember и поэтому не имеет метода get(), но я попытался сделать прямое назначение в сериализаторе - например, user_id: model.user_id' - и это тоже не получилось. Использует ли сериализатор параметр, отправленный ему, как объект Ember? – ken

+0

В качестве последнего шага я попытался сделать объект ActivityDefaults объектом Ember, но, если я не восполнил объем этого объекта, он также не работает корректно. Примечание: когда я нажимаю ссылку linkTo, теперь он отправляет сообщение «Эта ссылка находится в состоянии неактивной загрузки, потому что по крайней мере один из ее параметров теперь имеет значение null/undefined». Я добавлю фрагмент кода к вопросу. – ken