【问题标题】:Format a property before displaying it在显示之前格式化属性
【发布时间】:2013-01-31 10:56:00
【问题描述】:

您好 StackOverflow 专家,

我想知道是否可以使用 Ember.js 的计算属性来修改属性的值,然后再返回到任何请求它的对象。

想象一下这个简单的例子: 我有一个带有邮件属性的用户对象 当我设置属性时,我希望将电子邮件地址从 first.last@example.com 更改为 first.last@anotherexample.com,然后返回它

当我请求属性时(通过 User.get ),我想取回修改后的属性。

我认为通过使用另一个“帮助”属性(例如 formatted_mail)应该非常简单,我将在其中存储和检索格式化值,但我想知道是否可以在没有其他模型属性的情况下完成类似的操作。

到目前为止,我有这个 coffescript 代码,但我在读取属性时总是得到“未定义”,即使我之前设置了它,所以我怀疑 Ember 没有在任何地方保存该值:

mail: ( ( key, value ) ->
    if arguments.length == 1
        return this.get 'mail'
    else
        return value.split( '@' )[0] + '@anotherexample.com'
).property 'mail'

感谢您的帮助!

【问题讨论】:

  • 试试车把助手,比如{{formatEmail mail}}
  • 嗨 ManoHaran,这似乎也是一种方式,但我觉得这种修改确实与我的模型逻辑相关,我希望这发生在模型对象上,而不是在表示层上。不过感谢您的建议!

标签: ember.js


【解决方案1】:

您已接近解决方案。

由于默认情况下计算属性总是在 Ember 中缓存(您可以使用 .volatile() 禁用此行为),您不必指定当 arguments.length 为 1 时要执行的操作,除非您想指定默认值.

所以这里应该是这样的:

App.User = Ember.Object.extend({
  mail: function(key, value) {
    if (arguments.length === 2) {
      return value.split('@')[0] + "@tieto.com";
    }
    return null;
  }.property()
});

return null 只是指定默认值。

当你设置mail属性时,它会缓存返回的值,并且总是返回它而不重新计算这个属性。

请注意,您可以这样做只是因为mail 属性不依赖于其他属性。如果您使用.property('anotherProperty') 声明它,则mail 属性将在anoterProperty 更改时重新计算。所以在上面的例子中,它会将其重置为null

你可以试试in this JSFiddle

【讨论】:

  • 嗨,这按预期工作。经过一些调试后,我发现我是使用 user.mail 访问该计算属性,而不是 user.get('mail'),这当然没有帮助。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-09
  • 1970-01-01
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
  • 2020-08-14
相关资源
最近更新 更多