推送新 POJO 后视图未更新 ember
View doesn't update after pushing new POJO ember
我一直读到 Ember 使用 POJO 代替 Ember 数据工作得很好,但现在我试一试,遇到了一点麻烦。
我正在为数据库使用 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 that adds a lot of nifty things, like being properly observable in the Ember ecosystem. The Ember.MutableArray in particular (or rather Ember.MutableEnumerable if you want to go deep) has a method called pushObject(obj) 中提供了自己的数组实现,Push the object onto the end of the array.
并通知所有订阅者。
由于 Ember 也足够好,可以将这些添加到常规数组原型中以方便人们开始使用,因此您应该能够在代码中简单地执行 this.get('model.tags').pushObject(tag);
。
我一直读到 Ember 使用 POJO 代替 Ember 数据工作得很好,但现在我试一试,遇到了一点麻烦。
我正在为数据库使用 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 that adds a lot of nifty things, like being properly observable in the Ember ecosystem. The Ember.MutableArray in particular (or rather Ember.MutableEnumerable if you want to go deep) has a method called pushObject(obj) 中提供了自己的数组实现,Push the object onto the end of the array.
并通知所有订阅者。
由于 Ember 也足够好,可以将这些添加到常规数组原型中以方便人们开始使用,因此您应该能够在代码中简单地执行 this.get('model.tags').pushObject(tag);
。