2013-08-20 37 views
1

得到分頁我喜歡this的例子,但還是不能讓分頁ember.js不能從元數據

這是我store.js.coffee

Eme.serializer = DS.RESTSerializer.create() 

Eme.serializer.configure 
    meta: 'meta' 
    pagination: 'pagination' 

Eme.CustomAdapter = DS.RESTAdapter.extend 
    serializer: Eme.serializer 
    namespace: "api/v1" 

Eme.Store = DS.Store.extend 
    revision: 13 
    adapter: 'Eme.CustomAdapter' 

這是我的控制器

Eme.PluginsController = Em.ArrayController.extend 
    content: [] 
    pagination: (-> 
    if this.get('model.isLoaded') 
     console.log @get('model.type') 
     console.log @get('store').typeMapFor(modelType).metadata 

     modelType = @get('model.type') 
     @get('store').typeMapFor(modelType).metadata.pagination 
).property('model.isLoaded') 

這是響應

{ 
    "meta":{ 
    "pagination":{ 
     "total_count":16, 
     "total_pages":2, 
     "current_page":1 
    } 
    }, 
    "plugins":[{ 
    "id":"1", 
    "name":"zhangsan", 
    }] 
} 

這是我的日誌:

Eme.Plugin

對象{}

回答

2

在您粘貼的例子中,modelType變量是輸出已被定義之前安慰。這可能是您沒有按預期看到分頁數據的原因。

我創建了一個帶有稍微修改版本的代碼的jsbin,它似乎可以正確輸出分頁數據。參見:http://jsbin.com/anIKAfO/2/edit

App = Ember.Application.create({}); 

App.IndexRoute = Ember.Route.extend({ 
    model: function(){ 
    return App.Plugin.find(); 
    } 
}); 

App.IndexController = Ember.ArrayController.extend({ 
    pagination: function() { 
    if (this.get('model.isLoaded')) { 
     var store = this.get('store'); 
     modelType = this.get('model.type'); 
     console.log('modeltype: ', this.get('model.type')); 
     var metadata = store.typeMapFor(modelType).metadata; 
     console.log('metadata: ', metadata); 
     return metadata.pagination; 
    } 
    }.property('model.isLoaded') 
}); 

App.Store = DS.Store.extend({ 
    adapter: 'App.Adapter' 
}); 

App.Plugin = DS.Model.extend({ 
    name: DS.attr('string') 
}); 

App.serializer = DS.RESTSerializer.create(); 

App.serializer.configure({ 
    meta: 'meta', 
    pagination: 'pagination' 
}); 

App.Adapter = DS.RESTAdapter.extend({ 
    serializer: App.serializer, 
    ajax: function(url, type, hash) { 
    console.log('App.Adapter.ajax:', url, type, hash); 
    json = App.RESTDATA[url]; 
    if (json) { 
     console.log('App.Adapter.ajax: Found RESTDATA: ', json); 
     return new Ember.RSVP.Promise(function(resolve, reject) { 
     Ember.run(null, resolve, json); 
     }); 
    } else { 
     console.log('App.Adapter.ajax: No RESTDATA for url, calling API', url); 
     return this._super(url, type, hash); 
    } 
    } 
}); 

App.RESTDATA = { 
'/plugins': 
    { 
    "meta":{ 
    "pagination":{ 
     "total_count":16, 
     "total_pages":2, 
     "current_page":1 
    } 
    }, 
    "plugins":[{ 
    "id":"1", 
    "name":"zhangsan" 
    }] 
    } 
};