推送新的POJO余烬

时间:2015-10-10 04:43:10

标签: ember.js nw.js

我一直都认为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?感谢。

1 个答案:

答案 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);