在使用MVC设计的ExtJS应用程序中,如何从php/mysql后端查询记录或在php后端调用方法,同时传递对象或数组数据?
所有我看到的模型,代理,MVC风格的例子,显示简单的例子,如
myModel.load(123, ...
它所做的就是加载id为123的记录。大多数示例还展示了如何创建记录或更新现有记录。
但是如果我想加载一个名字为"John"的用户呢?
看起来也许我需要使用一个商店?
在其他环境中(如AMF消息传递),我通常传递对象——例如,创建一个'User'对象或集合,设置名称,调用类似
的东西 userService.Load(userObject);
然后,在服务器端我接收到"userService"的请求。load"(服务器上的一个方法),然后接收对象,取出我需要的内容,并返回结果对象(或数组集合)。
是否有关于如何在ExtJS中使用模型/代理查询的任何示例?
那么,如何使用对象呢?我认为模型将是对象,并通过代理定义传递自己?
我认为你得到了它,不知怎么的,错误的模型,模型只是一个数据模型的定义,认为它作为一个行定义在客户端,让我们使用一些例子:
我们在后端有一个订单表,我们可以在前端用Model表示它,像这样:
var orders = Ext.define('Orders'. {
extend: 'Ext.data.Model',
fields:['id', 'user_id', 'qty', 'item_ordered'],
proxy: {
type:' ajax',
url: 'orders.php',
reader: {
type: 'json',
root: 'orders'
}
}
});
这是一个非常简单的模型,现在,如果我想一次只获取一个订单,我可以使用模型来做到这一点,像这样:
var order = Ext.ModelManager.getModel('Orders');
order.load(1); //This will load the order with id = 1
但是,另一方面,如果我想获得所有的订单(例如,对于一个用户),我将使用Store
,商店管理模型的集合,我们可以说它是一个表的视图,由您可以在Model
中定义的结构化数据组成的行集合,让我们定义一个使用我们模型的简单商店:
var ordersStore = Ext.create('Ext.data.Store', {
model:'Orders',
proxy: {
type: 'ajax',
url : 'orders.php',
reader: {
type: 'json',
root: 'orders'
}
}
});
/* This should get us our orders for the user with id=1 and also answer your
question about how to get a user with name = 'John', you can do it in the same way */
ordersStore.load({params:{user_id:1}});
这是关于获取数据,你如何处理你的服务器与PHP,好吧,我相信这是另一个问题。
关于"模型"通过"代理"传递自身,当添加或更新ej:
order.set('qty', 4);
order.save(); // This will pass the 'Order' Model to the server.
或:
var newOrder = Ext.create('Order', {user_id:1, qty: 2, item_ordered: 66});
newOrder.save(); // This will pass the 'Order' Model to the server too.
在这里你也可以得到更多的信息:
Ext Store文档
Ext Model docs
我希望这能让你开始学习模型和商店。