获取元数据时Ember-数据奇怪的问题

时间:2015-01-23 22:53:23

标签: javascript ember.js ember-data metadata

抱歉我的英文。

所以我在获取metedata时遇到了一些奇怪的问题。我的应用程序显示书签列表。我已经设置了无限滚动系统。它工作得很好。要设置此无限滚动,我在我的控制器中有一个动作,它会加载更多书签:

loadMore: function() {

    var self = this;
    var meta = this.store.metadataFor('bookmark');

    if(meta.nextPage != null) {
        self.set('isLoadingMore', true);

        self.store.find('bookmark', {page: meta.nextPage})
            .then(function(bookmarks) {
                self.set('isLoadingMore', false);
            }).catch(function(err) {
                self.set('isLoadingMore', false);
            });

    }
    else {
        self.set('isLoadingMore', false);
    }

}

所以这个功能完美无缺。如果我滚动它会加载下一页书签。这是js控制台:

XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=3".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=4".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=4".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=5".

但我想做的是在我的模板中使用这些meteData。所以我在我的控制器中创建了一个计算属性:

metaData: Ember.computed('model.isFulffiled', function() {
            return this.store.metadataFor('bookmark') 
        }),

由于我已经这样做了,我可以访问模板中的元数据,但是当调用loadMore函数时,metada似乎没有被更新。因此,loadMore函数总是加载初始请求的元数据中给出的下一页。

 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".
jquery.js:8625 XHR finished loading: GET "http://localhost:8000/api/bookmarks?page=2".

我还在discuss.emberjs.com

上发布了这个问题

1 个答案:

答案 0 :(得分:1)

我感谢这个link

显然我应该使用:

Ember.copy(store.metadataFor('user'))

避免这些问题。所以我在我的控制器中创建了一个计算属性,如下所示:

metaData : function() {
    return Ember.copy(this.store.metadataFor('bookmark'));
}.property('content.@each'),

现在它可以工作了,我可以在我的模板中访问我的元数据,如下所示:

Total : {{metaData.total}} Current page: {{metaData.currentPage}}

我不知道这是否是正确的方法,所以如果我有其他解决方案随时发布它。