1

我正在尝试设置一个列表页面,如下所示:

{{#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按预期在页面上运行。我看到项目名称,链接转到项目。但是然后在项目页面上,该项目似乎不认为它与任何任务相关联。它访问服务器,服务器响应项目和相关任务。但是,它似乎并没有用新数据刷新项目。我究竟做错了什么?

4

2 回答 2

1

看起来你可以这样做:

{{#each task in controller}}
  {{#linkTo 'project' task.project_id}}
    {{task.project_name}}
  {{/linkTo}}
{{/each}}
于 2013-09-27T23:25:21.387 回答
0

您是否尝试过使用异步关系?

就像是:

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

不确定是否可以仅使用 JSON 中的项目 id,但您应该可以使用links例如{ task: { id: 1, projectName: 'foo', links: { project: 'project/2' }(这将项目嵌套在可能不需要的任务下,但也许您可以使用完整的 URL 或其他东西)。

模板中的链接就像{{#link-to 'projects.show' project}}{{projectName}}{{/link-to}}

这是一个活生生的例子

于 2013-09-27T08:03:53.477 回答