2014-12-10 3 views
2

Это моя текущая ситуация. У меня есть маршрут просмотра кампании, который вложен в маршрут кампании. Я использую динамические сегменты, поэтому на странице просмотра отображаются только необходимые данные для этой конкретной кампании.Ember {{# link-to}} не переходит на маршрут

Это иллюстрируется на моих маршрутах:

TM.Router.map(function(){ 
    this.resource("campaigns", function(){ 
     this.route("view", { path: "/view/:id" }), 
     this.route("create"), 
     this.route("edit", { path: "/edit/:id" }) 
    }) 
}); 

URL-адрес для страницы просмотра является:

/campaigns/view/2 

Маршрут кампании имеет ссылку редактирования (которая появляется только на странице просмотра), что должен вывести пользователя на страницу редактирования с формой, которая предварительно заполнена данными из текущего элемента.

Так что я связала модель на страницу редактирования, как например:

TM.CampaignsEditRoute = Ember.Route.extend({ 
    model: function(params){ 
     return this.store.find("campaign", params.id); 
    } 
}); 

и ссылку редактирования в маршруте кампаний:

<li>{{#link-to "campaigns.edit"}}Edit Campaign Code Info{{/link-to}}</li> 

Изменения ссылка от:

/campaigns/view/2 

до

/campaigns/edit/2 

.. но по какой-то причине шаблон редактирования не отображается/загружается на страницу, и не является запросом GET для модели, и я не уверен, почему.

Если я обновляю страницу, появляется форма, но при первом нажатии ничего не происходит.

Update

Когда я жесткий код идентификатор в {{# ссылка на имя}},

<li>{{#link-to "campaigns.edit" "2"}}Edit Campaign Code Info{{/link-to}}</li> 

ссылка работает, как он должен, но я, когда я использую campaign.id, Я получаю

This link-to is in an inactive loading state because at least one of its parameters presently has a null/undefined value, or the provided route name is invalid. 

Update 2

Таким образом, проблема заключается в том, что ссылка, которая редактирует кампанию, находится на верхнем уровне маршрута (кампании), а данные, которые я хочу изменить, - в режиме просмотра кампаний. Ссылка в кампаниях не знает, что такое идентификатор данных в представлении кампаний.

ответ

2

Теперь, когда у меня есть больше информации о вашей проблеме - я решил опубликовать еще один ответ. Проблема в том, что у вас есть цветовая модель, которая продолжает меняться, что вам нужно отслеживать на родительском уровне.

На основании документации ember.js' here, я придумал следующее решение:

App.ColorManagerController = Ember.Controller.extend({ 
    currentColour: null 
}); 

App.IndexController = Ember.ArrayController.extend({ 
    needs: ['colorManager'], 
    currentColour:Ember.computed.alias('controllers.colorManager.currentColour'), 

    editMode: false, 

    actions: { 
    goToDetails: function(colour){ 
     this.set("editMode",true); 
     return this.transitionToRoute("index.view", colour); 
    } 
} 
}); 

App.IndexViewController = Ember.ObjectController.extend({ 
    needs: ['colorManager'], 

    currentColour:Ember.computed.alias('controllers.colorManager.currentColour'), 

    modelChanged: function(){ 
    this.set('currentColour', this.get('model')); 
    }.observes('model') 

}); 

В основном, currentColour собственности (хотя написано неправильно;)) получает синхронизируются вверх через родительские и дочерние контроллеры ,

Тогда в вашем index (родителю) шаблона, нужно просто сказать

{{#if editMode}} 
    {{#link-to "index.edit" currentColour}}Edit Colour{{/link-to}} 
    {{/if}} 

Рабочий раствор на jsbin here

+0

Отлично. Это сработало. Спасибо за вашу помощь!!! – Jetchy

1

Я думаю, что это должно быть:

<li>{{#link-to "campaigns.edit" campaign}}Edit Campaign Code Info{{/link-to}}</li>

Следующая ссылка объясняет это очень хорошо - http://emberjs.com/guides/templates/links/

+0

страница редактирования не появляется, и я получаю предупреждение: Этот ссылка- to находится в состоянии неактивной загрузки, потому что по меньшей мере один из его параметров в настоящее время имеет значение null/undefined или указанное имя маршрута недействительно. – Jetchy

+0

Правильно, вам не хватает переменной 'campaign' или независимо от того, с какой переменной вы должны ссылаться. – Kalman

+0

См. Ссылку, которую я отправил в ответ – Kalman

0

Я думаю, вы должны внести изменения в вашу вложенную структуру маршрута/ресурсов.Посмотрите на этой странице Эмбер под Routes разделе Вложенные для примера: http://emberjs.com/guides/routing/defining-your-routes/

Я хотел бы сделать мой маршрутизатор что-то вроде:

TM.Router.map(function(){ 
    this.resource("campaigns", function(){ 
     this.route("create"); 
     this.resource("campaign", { path: "/:id", function(){ 
      this.route("view"); 
      this.route("edit"); 
     }); 
    }) 
}); 

ваша ссылка к помощнику теперь должен неявно работать с идентификатором пары в URL, так что ссылка-на должны работать без необходимости передавать значение к нему:

<li>{{#link-to "campaigns.edit"}}Edit Campaign Code Info{{/link-to}}</li>  
Смежные вопросы