Ember模特给json

Ste*_*han 22 javascript ember.js

我正在寻找一种有效的方法将我的Ember对象转换为json字符串,以便在下面的websocket消息中使用它

/*
 * Model
 */

App.node = Ember.Object.extend({
  name: 'theName',
  type: 'theType',
  value: 'theValue',
})
Run Code Online (Sandbox Code Playgroud)

websocket方法:

App.io.emit('node', {node: hash}); 
Run Code Online (Sandbox Code Playgroud)

hash应该是节点的json表示.{name:thename,type:theType,..}必须有一个快速的在线人才能做到这一点.我不想手工做,因为我有很多属性,他们很可能会改变..

pan*_*atz 14

如上所述,您可以从ember-runtime/lib/core.js#inspect函数中获取灵感来获取对象的键,请参阅http://jsfiddle.net/pangratz666/UUusD/

App.Jsonable = Ember.Mixin.create({
    getJson: function() {
        var v, ret = [];
        for (var key in this) {
            if (this.hasOwnProperty(key)) {
                v = this[key];
                if (v === 'toString') {
                    continue;
                } // ignore useless items
                if (Ember.typeOf(v) === 'function') {
                    continue;
                }
                ret.push(key);
            }
        }
        return this.getProperties.apply(this, ret);
    }
});
Run Code Online (Sandbox Code Playgroud)

注意,由于提交1124005(可在ember-latest.js下一版本中使用),您可以ret直接将数组传递给getProperties,因此getJson函数的return语句如下所示:

return this.getProperties(ret);
Run Code Online (Sandbox Code Playgroud)

  • 这似乎不支持Jsonables的嵌套层次结构 (2认同)

ebr*_*ryn 11

您可以Ember.Object通过getProperties()使用键列表调用从实例获取纯JS对象(或哈希).

如果你想把它作为一个字符串,你可以使用JSON.stringify().

例如:

var obj  = Ember.Object.create({firstName: 'Erik', lastName: 'Bryn', login: 'ebryn'}),
    hash = obj.getProperties('firstName', 'lastName'), // => {firstName: 'Erik', lastName: 'Bryn'}
    stringHash = JSON.stringify(hash); // => '{"firstName": "Erik", "lastName": "Bryn"}'
Run Code Online (Sandbox Code Playgroud)

  • 如果您想从Ember模型中获取所有属性,该怎么办?obj.getProperties()不起作用.有什么简单的方法除了列出所有属性.如果模型中有太多属性,那将是乏味的. (2认同)

Est*_*rai 0

Ember DataModel的对象使用一种toJSON方法进行计数,该方法可以选择接收带有属性的普通对象,includeId用于将 Ember 数据模型转换为带有模型属性的 JSON。

https://api.emberjs.com/ember-data/2.10/classes/DS.Model/methods/toJSON?anchor=toJSON

您可以按如下方式使用它:

const objects = models.map((model) => model.toJSON({ includeId: true }));
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。享受!