Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何修改数据模型以获得计算属性?_Javascript_Ember.js - Fatal编程技术网

Javascript 如何修改数据模型以获得计算属性?

Javascript 如何修改数据模型以获得计算属性?,javascript,ember.js,Javascript,Ember.js,我从一个保存了一些信息的远程服务器返回JSON数据。(产品名称和日期) 我想修改把手模板中的日期输出 我应该使用属性来更改日期的格式吗?还是有更好的方法?如果是,我该怎么办 提前感谢您。余烬助手: 更好的方法是使用将日期转换为可用格式。帮助器优于计算属性的原因是,它可以在您的代码中的任何地方重用,以便在模板中格式化日期 我必须用这个助手 帮手: 用法: 注: 此示例使用将日期转换为格式DD/MM/YY,但显然您可以更改此格式 可以使用标准JavaScriptdate对象在不使用此外部库的情况下进

我从一个保存了一些信息的远程服务器返回JSON数据。(产品名称和日期)

我想修改把手模板中的日期输出

我应该使用属性来更改日期的格式吗?还是有更好的方法?如果是,我该怎么办

提前感谢您。

余烬助手: 更好的方法是使用将日期转换为可用格式。帮助器优于计算属性的原因是,它可以在您的代码中的任何地方重用,以便在模板中格式化日期

我必须用这个助手

帮手: 用法: 注: 此示例使用将日期转换为格式
DD/MM/YY
,但显然您可以更改此格式

可以使用标准JavaScript
date
对象在不使用此外部库的情况下进行转换。助手只需要返回格式化的字符串


计算属性: 要将其作为计算属性执行,需要付出更多的努力。你可以看到一个。演示使用了
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 };
    }
});