我一直都认为Ember可以用POJO代替Ember Data,但是现在我试了一下,我有点麻烦。
我正在使用NW.js和LinvoDB为数据库创建应用程序。从数据库中获取很容易,效果很好:
// route/index
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
var gui = require('nw.gui');
var linvoDB = require('linvodb3');
linvoDB.defaults.store = {db: require('medeadown')};
linvoDB.dbPath = gui.App.dataPath;
var File = new linvoDB('file', {} );
var Tags = new linvoDB('tag', {});
var media = new Promise(function(resolve, reject) {
var query = File.find().sort({ctime: -1}).live();
File.on('liveQueryUpdate', function() {
resolve(query.res);
});
});
var tags = new Promise(function(resolve, reject) {
var query = Tags.find().sort({name: 1}).live();
Tags.on('liveQueryUpdate', function() {
resolve(query.res);
});
});
return Ember.RSVP.hash({
media: media,
tags: tags
});
}
});
我设置了一个简单的事件来创建标记,保存并将其推送到模型中:
//controllers/index
actions: {
viewMedia: function(media) {
this.transitionToRoute('media', media)
},
addTag: function() {
var linvoDB = require('linvodb3');
var gui = require('nw.gui');
linvoDB.defaults.store = {db: require('medeadown')};
linvoDB.dbPath = gui.App.dataPath;
var Tag = new linvoDB('tag', {});
var tag = new Tag();
tag.name = this.get('tagName');
tag.save();
this.get('model.tags').push(tag);
}
}
我可以验证标记对象是否正在模型中的标记数组中正确插入,但视图不会更新。根据我的阅读,我的原因是我没有使用Ember.Object。
您如何使用POJO执行此操作,还是必须使用Ember.Objects?感谢。
答案 0 :(得分:0)
Ember在Ember.Array / Ember.MutableArray中提供了自己的数组实现,增加了许多漂亮的东西,比如在Ember生态系统中可以正确观察。特别是Ember.MutableArray(或者更确切地说是Ember.MutableEnumerable,如果你想深入)有一个名为pushObject(obj) Push the object onto the end of the array.
的方法,并且还会通知任何订阅者。
由于Ember还非常适合将这些添加到常规Arrays原型中以方便人们开始使用,因此您应该能够在代码中执行this.get('model.tags').pushObject(tag);
。