【问题标题】:Binding to a model relationship property fails in the each helper在每个帮助器中绑定到模型关系属性失败
【发布时间】:2016-01-29 16:41:49
【问题描述】:

在每个帮助器中绑定到模型关系属性失败,如下所示:

这是我的模型:

//app/models/category.js
export default DS.Model.extend({
  name: DS.attr(),
  image: DS.belongsTo('image', { async: true }),
});

//app/models/image.js
export default DS.Model.extend({
  name: DS.attr('string'),
  thumbfullfilepath: DS.attr('string'),
  category: DS.belongsTo('category', { async: true })
});

当我在下面的每个车把助手中运行类别模型以检索图像标签的“thumbfullfilepath”时,没有值绑定到 img src:

{{#each model as |category|}} 
    <div class="small-element item">
        <div class="cat-name"><a href="#">{{category.name}}</a></div>
        <div class="cat-name edit">{{#link-to 'admin.categories.edit' category}}Edit{{/link-to}}</div>
        <span class="entry-thumb">
            <img src={{category.image.thumbfullfilepath}} alt="">
        </span>   
    </div>
{{/each}}

但是,当我访问加载单个类别模型的“admin.categories.edit”路由时,我已经验证了关系绑定在单个模型的显示上有效,{{category.image.thumbfullfilepath}} 路径是检索并反映在模板中。这让我相信,由于某种原因,模型关系绑定在模板中的每个车把助手中失败。

有人可以在这里阐明一下吗?

## 对我有用的解决方案

我创建了一个图片组件“image-atom”,它的component.js如下:

//pods/components/image-atom.js
export default Ember.Component.extend({
  tagName: 'img',
  attributeBindings: ['src', 'alt'],
  alt: '',
  src: Ember.computed(function () {
    this.get('source').then((image) => {
        this.set('src', image.get('thumbfullfilepath'));
    });
    return null;
  })
});

我在下面这样使用它,它可以工作,但感觉很hacky:

{{#each model as |category|}} 
    <div class="small-element item">
        <div class="cat-name"><a href="#">{{category.name}}</a></div>
        <span class="entry-thumb">
          {{image-atom source=category.image alt=""}}
        </span>   
    </div>
{{/each}}

下面是环境细节:

  • ember cli 版本:“2.2.0-beta.2”
  • 余烬数据:“^2.2.1”
  • 余烬:“2.2.0”
  • 节点:“0.12.7”
  • npm: "2.14.10"
  • 操作系统:“darwin x64 El Capitan”

告诉我。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您可能会更好地在图像周围包裹一个 {{if 助手。

    <span class="entry-thumb">
      {{#if category.image.thumbfullfilepath}}
        <img src={{category.image.thumbfullfilepath}} alt="">
      {{/if}}
    </span>
    

    问题可能是在图像尝试渲染之前没有解决image.thumbfullfilepath,因为它是一个异步承诺。

    编辑:为了记录,不建议在您的示例中使用计算属性中的承诺。这可能比什么都更令人头疼。

    【讨论】:

    • 非常感谢您的回复。将尝试您的解决方案并返回并将其标记为答案。但是一个快速的,不是车把模板绑定应该自动更新关系属性吗?关于在计算属性中使用 Promise。我同意,我不得不放弃计算属性解决方案,因为它给出了断断续续的结果并选择侧载相关的图像模型,它似乎工作。会就此问题与您联系。
    • 刚刚验证了您的解决方案有效。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多