【问题标题】:Transform array of plain JS objects to Ember.js ArrayController将普通 JS 对象数组转换为 Ember.js ArrayController
【发布时间】:2012-07-14 18:41:04
【问题描述】:

我刚开始使用 Ember.js 框架,我遇到了一个简单的问题。我将我的数据初始化为普通 JS 对象(填充模板,由我的 PHP 脚本创建),我想在 Ember.Application 启动之前将它们转换为 Ember.js 对象(或者在它启动后立即,我不'还不知道区别)。

这样的事情可能吗?如果是,最好的方法是什么?

例子:

App.User = Em.Object.extend({
    id: null,
    avatar: "/path/to/default/avatar.jpg",
    name: null,
});
my_data = [
    {"id":1, "name":"John Doe"}, 
    {"id":2, "name":"Barrack Obama", "avatar":"/president/photo.jpg"}
];
App.usersController = Em.ArrayController.create({
    content: [],
    addUser: function(user) { ... },
});

我需要这样的东西:

App.usersController.initialize(my_data);

编辑:还有一件事。我的数据与 Ember 对象的格式不完全相同,因此我需要进行一些转换。举个例子,假设我将头像和名字包裹在另一个对象中,如下所示:

{
  "id":2, 
  "info": {
      "name":"Barrack Obama", 
      "avatar":"/president/photo.jpg"
  }
}

【问题讨论】:

  • 将 App.usersController.pushObjects(my_data) 转换为 Ember.Object 后有什么问题?
  • 这就是我的观点。我怎样才能轻松地转换它们,而不需要任何不必要的代码?

标签: ember.js javascript-objects


【解决方案1】:

您可以使用map 函数来“转换”您的数组,请参阅http://jsfiddle.net/pangratz666/agp8C/

App.usersController = Em.ArrayController.create({
    content: [],
    initWithDataFromServer: function(hash){
        var users = hash.map(function(item){
            return App.User.create({
                id: item.id,
                name: item.info.name,
                avatar: item.info.avatar
            });
        });
        this.pushObjects(users);
    }
});
App.usersController.initWithDataFromServer(my_data);

【讨论】:

  • 谢谢,我使用了这种方法。
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 2016-08-30
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 2020-03-02
  • 2015-08-20
  • 1970-01-01
相关资源
最近更新 更多