1

我正在尝试通过 GET 方法调用我的服务器操作 /users/menus,但它似乎只能与 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'
    }
});  
4

1 回答 1

0

那是因为您的 url 架构是 REST 架构,然后您应该使用 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;            
        }
    }    
});

这与 rest 代理类似,但它是一个 ajax 代理。

祝你好运!

于 2012-11-26T16:22:35.237 回答