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)
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 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)
希望能帮助到你。享受!