我正在尝试通过GET方法调用我的服务器操作/用户/菜单,但它只能与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 :(得分: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代理。
祝你好运!