[英]View doesn't update after pushing new POJO ember
我一直都读到,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? 谢谢。
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);
在您的代码中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.