Javascript 如何修改数据模型以获得计算属性?
我从一个保存了一些信息的远程服务器返回JSON数据。(产品名称和日期) 我想修改把手模板中的日期输出 我应该使用属性来更改日期的格式吗?还是有更好的方法?如果是,我该怎么办 提前感谢您。余烬助手: 更好的方法是使用将日期转换为可用格式。帮助器优于计算属性的原因是,它可以在您的代码中的任何地方重用,以便在模板中格式化日期 我必须用这个助手 帮手: 用法: 注: 此示例使用将日期转换为格式Javascript 如何修改数据模型以获得计算属性?,javascript,ember.js,Javascript,Ember.js,我从一个保存了一些信息的远程服务器返回JSON数据。(产品名称和日期) 我想修改把手模板中的日期输出 我应该使用属性来更改日期的格式吗?还是有更好的方法?如果是,我该怎么办 提前感谢您。余烬助手: 更好的方法是使用将日期转换为可用格式。帮助器优于计算属性的原因是,它可以在您的代码中的任何地方重用,以便在模板中格式化日期 我必须用这个助手 帮手: 用法: 注: 此示例使用将日期转换为格式DD/MM/YY,但显然您可以更改此格式 可以使用标准JavaScriptdate对象在不使用此外部库的情况下进
DD/MM/YY
,但显然您可以更改此格式
可以使用标准JavaScriptdate
对象在不使用此外部库的情况下进行转换。助手只需要返回格式化的字符串
计算属性: 要将其作为计算属性执行,需要付出更多的努力。你可以看到一个。演示使用了
localeDate
函数的修改版本
具有计算日期属性的余烬对象:
因此,创建一个具有computed属性的HistoryItem
对象
App.HistoryItem = Ember.Object.extend({
localeDate: function() {
var dt = new Date(this.get('date'));
return dt.toLocaleDateString() + " " + dt.toLocaleTimeString();
}.property('date')
});
更新模型:
模型是一个普通对象,您需要为历史记录中的每个项目创建HistoryItem
的实例
App.IndexRoute = Ember.Route.extend({
model: function() {
// Get the history
var history = App.JsonRequestFromRemoteServer.history;
var result = [];
// Create item as history item
history.forEach(function(item){
result.push(App.HistoryItem.create(item));
});
// Return the result as the model
return { history: result };
}
});
希望这有帮助
要解决不起作用的原因,请执行以下操作: 您试图使用
属性(“history@each.date”)
为集合中的每个项创建计算属性
不幸的是,这提供了所谓的聚合属性。您可以阅读更多有关的内容,但本质上,这将基于集合中的所有日期为您的历史对象提供一个属性。每个项目上没有所需的单个属性
我确实认为这是文档中应该更好地涵盖的Ember领域,您不是第一个认为可以通过这种方式将计算属性添加到集合中的人。您好,感谢您的回复。这正是我想做的。但是你能告诉我如何将我的日期转换成一种具有属性的可用格式(以便了解这两种方式)?我想我需要把房子和房子结合起来。但我不知道怎么做。。。谢谢你,快跑。好的,慢慢来。再次感谢。@kokeroulis我已经更新了,包括computed属性方法。是的,这对我有帮助。谢谢。但我只有最后一个问题。这是我在更新jsbin之前尝试的。你能解释一下为什么我的方法不起作用吗?再次感谢你。不幸的是,我无法投票支持你的答案,因为我没有足够的声誉点数。@kokeroulis我已经更新了,包括你的方法不起作用的原因。希望有帮助。:)
App.HistoryItem = Ember.Object.extend({
localeDate: function() {
var dt = new Date(this.get('date'));
return dt.toLocaleDateString() + " " + dt.toLocaleTimeString();
}.property('date')
});
App.IndexRoute = Ember.Route.extend({
model: function() {
// Get the history
var history = App.JsonRequestFromRemoteServer.history;
var result = [];
// Create item as history item
history.forEach(function(item){
result.push(App.HistoryItem.create(item));
});
// Return the result as the model
return { history: result };
}
});