6

为了在我的应用程序顶部制作一个黄色的“正在保存”/“已保存”指示消息,我想要一个布尔属性来指示当前是否有任何 ember 数据记录正在运行。

我试过这个:

App.store = DS.Store.create
  isSaving: (->
    for record in this.get('recordCache')
      if record?.getPath('stateManager.currentState.name') == 'inFlight'
        return true
    return false
  ).property('recordCache.@each.stateManager.currentState.name')

但后来我发现这recordCache是不可观察的。

我不使用交易,只有App.store.commit(),所以我看了看App.store.get('defaultTransaction'),但它没有产生任何有用的东西。

我正在使用 RESTAdapter,所以如果我可以将它扩展到给我这条信息,那也可以。

4

3 回答 3

4

为什么不扩展模型、控制器和/或视图:

DS.Model.reopen({
    didCreate: function() {
        this.set('persisted', true);
    },
    didUpdate: function() {
        this.set('persisted', true);       
    },

    resetPersistenceFlag: function(){
        this.set('persisted', false);
    }.observes('isDirty')

});

Ember.Controller.reopen({
    contentPersistedObserver: function() {
        if (this.get('content.persisted') === true) {
            //do stuff here
        }  
    }.observes('content.persisted')
});

Ember.View.reopen({
    controllerContentPersistedObserver: function() {
        if (this.get('controller.content.persisted') === true) {
            //do stuff here
        }  
    }.observes('controller.content.persisted')
});​

这样您的控制器/视图将知道模型何时保存。它会为创建/更新控制器触发,但对于管理阵列的控制器则不会。

于 2012-10-16T07:35:36.030 回答
2

好吧,您可以简单地创建一个带有 didUpdate 属性的基础模型来处理显示您的通知消息,然后让您的每个模型扩展它。这确实是一个权宜之计的解决方案,但它暂时有效:

App.Model = DS.Model.extend
    didUpdate: ->
        # invoke your notification
        alert("All changes saved!")

App.User = App.Model.extend()

但是....这将触发每条更新的记录。因此,您可能希望以这样一种方式创建您的通知类,即它不会一次打开多个已保存的通知……但这取决于您。

我目前正在从这个拉取请求https://github.com/emberjs/data/pull/376中实现一些基本的服务器验证方法,我希望我能想出一个更好的方法观察提交的状态(如果我这样做,当然会在这里发回)。

于 2012-09-15T04:35:11.763 回答
0

有一个更简单的解决方案:

App.MyView = Ember.View.extend({

    init: function () {
        this._super();
        var self = this;
        this.get('controller').content.on('didUpdate', function() {
            self.SomeCoolUpdateFunctionForMyView(self.$());
        });
    }
});

self.$() 对视图的 jquery 表示的引用。

于 2013-05-04T00:33:03.917 回答