javascript - 显示与单独 Controller 关联的模型

标签 javascript ember.js coffeescript ember-data

我有一个属于 WebLayout 的模型 WebsiteTemplate。在 UI 中,我想显示所有 webLayouts 的列表,但能够将 html 类添加到 id 与 webLayout 相同的类。 webLayout属于websiteTemplate,也就是我们访问的路由的模型。

关于如何做到这一点有什么想法吗?我知道我的设置也可能有一些根本性的错误,所以欢迎提出想法。似乎我想通过特定的 webLayout 将另一个参数传递给 render,但这似乎不是 Ember 的方式。

# website_template model
App.WebsiteTemplate = DS.Model.extend
 webLayout: DS.belongsTo("App.WebLayout")

# website_layout model
App.WebLayout = DS.Model.extend
 name: DS.attr("string"),
 thumbnail: DS.attr("string")

# router
App.Router.map ->
 @resource "website_template", path: "/website_template/:website_template_id"

# website_template route
App.WebsiteTemplateRoute = Ember.Route.extend
 setupController: ->
 @controller.set 'webLayouts',  App.WebLayout.find()

# website_template template
{{webLayout.id}}
{{render "_webLayouts" webLayouts}}

# web_layouts template
<ul>
 {{#each controller}}
  <li>
   <a href="#" {{ action "addLayout" this }}>
    <img alt="Thumbnail" {{ bindAttr src="thumbnail" }}>
    {{ name }}
   </a>
  </li>
 {{/each}}
</ul>

我知道以下有效,但这是我正在努力实现的想法的伪代码。

# website_template template
{{render "_webLayouts" webLayouts webLayout}}

# web_layouts template
<ul>
 {{#each webLayouts in controller}}
   {{#if webLayouts.id is webLayout.id}}
    <li class="selected">
   {{else}}
    <li>
   {{/end}}
    <a href="#" {{ action "addLayout" this }}>
    <img alt="Thumbnail" {{ bindAttr src="thumbnail" }}>
    {{ name }}
   </a>
  </li>
 {{/each}}
</ul>

最佳答案

乍一看,我缺少的是两个模型之间一对一关系的正确设置。

例子:

# website_template model
App.WebsiteTemplate = DS.Model.extend
  webLayout: DS.belongsTo("App.WebLayout")

# website_layout model
App.WebLayout = DS.Model.extend
  name: DS.attr("string"),
  thumbnail: DS.attr("string"),
  websiteTemplate: DS.belongsTo("App.WebsiteTemplate")

至于 id 的比较,您可以编写一个自定义 handlebars 助手,它基本上看起来像这样:

Ember.Handlebars.registerHelper('equal', function(value1, value2, options) {
  if (value1 === value2) {
    return options.fn(this);
  } else {
    return options.inverse(this);
  }
});

然后像这样使用它:

{{#equal webLayouts.id webLayout.id}}
  are equal
{{else}}
  not equal
{{/equal}}

在这里查看工作 jsbin对于自定义助手。

希望对您有所帮助。

关于javascript - 显示与单独 Controller 关联的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17284417/

相关文章:

javascript - 如何检测文本区域何时失去焦点并在单击特定元素时防止其失去焦点?

javascript - 更改 props 后,componentDidMount 不断重复调用

ember.js - 将关系注入(inject) Ember 有效负载

javascript - 如何在文件上传完成时调用 JS 回调?

javascript - 选择正整数而不是分数

javascript - Emberjs - 简单的应用程序无法运行

ember.js - 如何按需加载部分 Ember.js?

ruby-on-rails - 如何在 Rails 中包含 CoffeeScript

ruby-on-rails - CoffeeScript 呈现提交操作两次,即使代码只提交一次

javascript - 如何缩短从 moment.js 获取的时区名称列表?