繁体   English   中英

推送新的POJO余烬后视图未更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM