2012-11-23 18 views
1

我想通過GET方法調用我的服務器動作/用戶/菜單,但它只能與REST代理一起工作。使用Extjs Ajax代理與rails rest服務器

這裏是我的商店聲明:

Ext.define('App.store.Menu', { 
extend: 'Ext.data.Store', 
model: 'App.model.Menu', 
proxy: { 
    type: 'ajax', 
    reader: { 
     type: 'json'   
    }, 
    api: { 
     read: 'users/menus' 
    } 
} 
}); 

,這裏是我如何裝載存儲:

var store = Ext.create('App.store.Menu').load({ 
    id: 1, 
    callback: function() { 
     //do something... 
    } 
}); 

,這是我的Rails代碼:

def menus 
    @user = User.find(params[:id]) 
    @menus = @user.menus 
    respond_to do |format| 
    format.html # menus.html.erb 
    format.json { render json: @menus } 
    end 
end 

我得到這個服務器上的錯誤:

ActiveRecord::RecordNotFound (Couldn't find User with id=menus): 
    app/controllers/users_controller.rb:16:in `show' 

但是,如果使用REST代理,我得到正確的請求:

Ext.define('App.store.Menu', { 
    extend: 'Ext.data.Store', 
    model: 'App.model.Menu', 
    proxy: { 
     type: 'rest', 
     format: 'json', 
     url: 'users/menus' 
    } 
}); 

回答

0

那是因爲你的URL模式是一個REST架構,然後你應該使用其他代理。這是兩個代理服務器發送怎樣的ID值:

Ajax代理:yourdomain.com/users/menus?id=1

休息代理:yourdomain.com/users/menus/1

當您的應用程序瞭解其餘架構時,沒有理由使用和ajax代理。但是,如果要強制的東西,以便能夠使用一個Ajax請求,您可以修改您的代理如下:

Ext.define('App.store.Menu', { 
    extend: 'Ext.data.Store', 
    model: 'App.model.Menu', 
    proxy: { 
     type: 'ajax', 
     url: 'users/menus', 
     reader: { 
      type: 'json'   
     }, 
     buildUrl: function(request) { 
      debugger; 
      var me = this, 
       url = me.getUrl(request), 
       operation = request.operation, 
       id = operation.id; 

      if (id) { 
       if (!url.match(/\/$/)) { 
        url += '/'; 
       } 

       url += id; 
      } 
      return url;    
     } 
    }  
}); 

這確實相似,以至於休息代理的東西,但它是一個Ajax代理。

祝你好運!