2013-04-04 2 views
3

Несчастливо, пример для ссылок в направляющих Ember (http://emberjs.com/guides/templates/links/) для меня не работает.linkTo генерирует href в/<App.Object: ID>, а не в/ID

Чтобы показать список tempworkers, и есть ссылка для каждого tempworker на странице детали, я использую следующий код:

HTML:

<script type="text/x-handlebars" data-template-name="tempworkers"> 
    <div> 
    {{#each controller }} 
     <tr> 
     <td>{{#linkTo 'tempworker' this}} {{firstname}} {{/linkTo}}</td> 
     <td>{{initials}}</td> 
     <td>{{completeSurname}}</td> 
     </tr> 
    {{/each}} 
    </div> 
</script> 

<script type="text/x-handlebars" data-template-name="tempworker"> 
    <div id="tempworker"> 
    <p>{{view Ember.TextField valueBinding='firstname'}}</p> 
    <p>{{view Ember.TextField valueBinding='initials'}}</p> 
    <p>{{view Ember.TextField valueBinding='surnamePrefix'}}</p> 
    <p>{{view Ember.TextField valueBinding='surname'}}</p> 
    </div> 
</script> 

Javascript:

window.App = Ember.Application.create({ 
    LOG_TRANSITIONS: true, 
    ENV.EXPERIMENTAL_CONTROL_HELPER = true; 
}); 

App.Store = DS.Store.extend({ 
    revision : 11, 
    adapter  : DS.RESTAdapter.extend({ 
     url  : 'http://dev.start.flexplanners.com/api' 
    }) 
}); 

App.Router.map(function() { 
    this.route('tempworkers'); // /tempworkers 
    this.route('tempworker', { path: '/tempworkers/:id' }); // /tempworkers/:id 
}); 

App.TempworkersRoute = Ember.Route.extend({ 
    model : function() { 
     return App.Tempworker.find(); // return All tempworkers to the TempworkersController 
    } 
}); 

/* TODO: Question -> According to http://emberjs.com/guides/routing/defining-your-routes/, this should be working by convention, and NOT explicitely defined here? 
* But when I leave it out, it's broken :(
* */ 
App.TempworkerRoute = Ember.Route.extend({ 
    model : function(params) { 
     return App.Tempworker.find(params.id); // return tempworker by id to the TempworkerController 
    } 
}); 

Пункты использования:

When I visit the URL /tempworkers, the app fires a request 
to my server API, and return the list in my tempworkers view. 

When I visit the URL /tempworkers/[UUID], the app fires a 
request to my server API, and return the requested tempworker 
in my tempworker view. 

When I click a generated link in the list of tempworkers, the app routes me 
to /tempworkers/<App.Tempworker:ember343:47cfa9f2159d45758ceacc4c15ae1671>, 
and shows the details in my tempworker view 

Мои вопросы таковы:

1) Являются ли эти 3 варианта использования ожидаемым поведением?

2) Если да, то это показывает различие между двумя состояниями, 1 - это новый URL-адрес посещения (включая вызов API-сервера) и 1 переход на другое представление, с разобранным ссылкой на один объект из списка?

3) Если да, когда будет момент перезагрузить список и обновить элементы в списке?

4) Если нет, то как я смогу создать ссылку для создания href как «/ tempworkers/[UUID]», и пусть приложение может вызвать вызов API-сервера сервера, чтобы получить детали tempworker?

Заранее благодарим за ваше время!

Rainer.

ответ

2

Вы делаете это правильно, вы только что сделали опечатку, ваш маршрут должен быть /tempworker/:tempworker_id.

App.Router.map(function() { 
    this.route('tempworkers'); // /tempworkers 
    this.route('tempworker', { path: '/tempworkers/:tempworker_id' }); // /tempworkers/:id 
}); 

Ember использует прилагаемый динамический ключ при поиске модели для десериализации.

+2

Чтобы уточнить, потому что это особенно противоречит тому, кто приходит из Rails, вы должны использовать соглашение /: _id и не можете настроить его, чтобы просто использовать /: id. – evanbikes

Смежные вопросы