2013-09-26 1 views
1

Я пытаюсь создать страницу списки что-то вроде этого:ember.js: Как отображать индекс записей и ссылок без sideloading

{{#each task in controller}} 
    {{#linkTo 'project' task.project}} 
    {{task.project.name}} 
    {{/linkTo}} 
{{/each}} 

Вопрос заключается в том, что я не хочу иметь предварительно загрузите каждый проект, связанный с каждой задачей, так как мне вряд ли понадобятся все они, и я в конечном итоге запутался в объединениях, сходящих вниз по дереву зависимостей для проекта. Вместо этого я пытаюсь сделать что-то вроде этого:

{{#each task in controller}} 
    {{#linkTo 'project' task.project_params}} 
    {{task.project_name}} 
    {{/linkTo}} 
{{/each}} 

И тогда модель задачи:

App.Task = DS.Model.extend 
    project_id: DS.attr('number')             
    project_name: DS.attr('string') 

    project_params: (->                
    { id: @get('project_id') }              
).property('project_id') 

Это решение фактически работает на tasks/index странице, как ожидалось. Я вижу название проекта, и ссылка идет на проект. Но тогда на странице проекта проект, похоже, не считает, что он связан с какими-либо задачами. Он попадает на сервер, и сервер отвечает проектом и связанными с ним задачами. Но, похоже, он не обновляет проект новыми данными. Что я делаю не так?

ответ

1

Похоже, вы можете просто сделать:

{{#each task in controller}} 
    {{#linkTo 'project' task.project_id}} 
    {{task.project_name}} 
    {{/linkTo}} 
{{/each}} 
+0

Конечно, но если вы действительно хотите определить взаимосвязь между задачами и проектами, вы должны иметь возможность использовать attribTo/hasMany и '# link-to 'project', task.project'. – gerry3

+0

Однако я не могу понять это сейчас, и я сдаюсь. – gerry3

0

Вы пытались использовать отношения async?

Что-то вроде:

App.Task = DS.Model.extend 
    project: DS.belongsTo('project', async: true) 
    projectName: DS.attr('string') 

Не уверен, если это возможно, чтобы заставить его работать только с идентификатором проекта в формате JSON, но вы должны быть в состоянии сделать это с links, например, { task: { id: 1, projectName: 'foo', links: { project: 'project/2' } (это проект гнезда под задачей, который может быть нежелателен, но, возможно, вы можете использовать полные URL-адреса или что-то еще).

Ссылка в шаблоне будет как {{#link-to 'projects.show' project}}{{projectName}}{{/link-to}}

Вот live example.

+0

Хм, кажется, не сделать трюк. Он по-прежнему загружает все проекты на странице индекса задач. – lobati

+0

Хорошая точка. Это не имеет никакого смысла. Интересно, что происходит. – gerry3

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