【问题标题】:Ember Interpolation in a href tag in handlebars template车把模板中 href 标记中的 Ember 插值
【发布时间】:2014-03-10 02:55:17
【问题描述】:

我正在尝试创建一个指向谷歌地图的简单链接,并将动态地址插入到 href 字段中。我已经尝试了下面的代码以及大量其他没有运气的乱七八糟的东西。如何在车把 href 字段中插入动态 ember 字符串?

我正在使用 ember、rails 和车把。 如果我将整个 url 与我的模型一起存储但我只有地址,我知道如何使用 bindAttr。如果我可以在视图中调用一次,那么在每个模型中添加 google url 似乎是不必要的。

<h1>{{name}}</h1>
 <div>
  <p><a {{bindAttr href='http://maps.com/?1=address'}}>{{address}}</a></p>
 </div>

<h1>{{name}}</h1>
<div>
  <p><a href='http://maps.google.com/?q={{address}}'>{{address}}</a></p>
</div>

我用来修复它的方法

App.Location = DS.Model.extend(
  name: DS.attr('string', defaultValue: "")
  address:  DS.attr('string', defaultValue: "")
  fullAddress: (->
    "http://maps.google.com/?q=#{@get('address')}"
  ).property('address')
)

【问题讨论】:

    标签: ember.js string-interpolation handlebars.js


    【解决方案1】:

    您可以这样做,请参阅demo

    基本上,您可以为公共属性创建一个Mixin,然后将其混合到您的模型中。 例如:

    App.BaseModel = Ember.Mixin.create({
      base: 'http://maps.google.com/?q=',
      fullAddress: function(){
        return this.get('base') + this.get('address');
      }.property('address')
    });
    
    App.MyModel = DS.Model.extend(App.BaseModel, {
      name: DS.attr('string'),
      address: DS.attr('string')
    });
    

    所以你以后可以像这样在你的模板中使用它:

    {{#each model}}
    <h1>{{name}}</h1>
      <div>
        <p><a {{bind-attr href='fullAddress'}}>{{address}}</a></p>
      </div>
    {{/each}}
    

    希望对你有帮助。

    【讨论】:

    • 谢谢!!你肯定给我指出了正确的方向。这是我第一次同时使用所有这些技术。 Rails,Ruby,Ember,Coffeescript,Handlebars,所以我仍然有点困惑如何构建所有内容,但我用添加到问题中的代码修复了它。再次感谢!
    • @GarrettBoone 很高兴我能提供帮助,请随时在 SO 上发布更多问题,我相信他们会成功回答 :)
    • @intuitivepixel jsbin 不工作。 (不渲染模板)
    猜你喜欢
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多