ExtJs模型代理与存储代理

ExtJs模型代理与存储代理,extjs,model,extjs4,store,restful-authentication,Extjs,Model,Extjs4,Store,Restful Authentication,好吧,我一直在思考ExtJs中的一项基本任务。我正在编写一个简单的登录脚本,它向RESTful web服务发送用户名和密码组合,并在凭据正确时接收GUID 我的问题是,我是使用模型代理还是商店代理 据我所知,模型表示单个记录,而存储用于处理包含多个记录的数据集。如果这是正确的,那么似乎应该使用模型代理 代码中的Sencha文档如下所示: Ext.define('AuthenticationModel', { extend: 'Ext.data.Model', fields: ['

好吧,我一直在思考ExtJs中的一项基本任务。我正在编写一个简单的登录脚本,它向RESTful web服务发送用户名和密码组合,并在凭据正确时接收GUID

我的问题是,我是使用模型代理还是商店代理

据我所知,模型表示单个记录,而存储用于处理包含多个记录的数据集。如果这是正确的,那么似乎应该使用模型代理

代码中的Sencha文档如下所示:

Ext.define('AuthenticationModel', {
    extend: 'Ext.data.Model',
    fields: ['username', 'password'],

    proxy: {
        type: 'rest',
        url : '/authentication'
    }
});

//get a reference to the authentication model class
var AuthenticationModel = Ext.ModelManager.getModel('AuthenticationModel');
到目前为止,一切正常,直到下一步:

//Use the configured RestProxy to make a GET request
AuthenticationModel.load('???', {
    success: function(session) {
        console.log('Login successful');
    }
});
模型类的load()方法是一个静态调用,需要一个唯一标识符。登录通常取决于两个因素,用户名和密码


因此,在ExtJS中,存储代理似乎是验证某人的用户名和密码凭据组合的唯一方法。有人能证实和解释吗?如有任何帮助,我们将不胜感激。

您只需了解以下内容:

如果为此配置了代理,则存储将使用自己的代理 实例,如果不是,则从模型中获取代理

因此,您可以轻松地使用两种代理配置来启用存储上的多积垢操作和模型上的单积垢操作。请注意,模型的静态加载方法需要模型
id
,因为它应该仅通过一个id加载模型(是的,不支持复合键)。您还必须在回调中获取模型实例(正如您所做的那样)

返回您的用户名/密码问题

您可以使用自定义的“loadSession”方法应用会话模型

loadSession: function(username,password, config) {
    config = Ext.apply({}, config);
    config = Ext.applyIf(config, {
        action: 'read',
        username: username,
        password: password
    });

    var operation  = new Ext.data.Operation(config),
        scope      = config.scope || this,
        callback;

    callback = function(operation) {
        var record = null,
            success = operation.wasSuccessful();

        if (success) {
            record = operation.getRecords()[0];
            // If the server didn't set the id, do it here
            if (!record.hasId()) {
                record.setId(username); // take care to apply the write ID here!!!
            }
            Ext.callback(config.success, scope, [record, operation]);
        } else {
            Ext.callback(config.failure, scope, [record, operation]);
        }
        Ext.callback(config.callback, scope, [record, operation, success]);
    };

    this.getProxy().read(operation, callback, this);
}

现在调用它而不是load。

我在sencha应用程序体系结构第2部分的文档中找到了它

对模型使用代理:

这通常是一个很好的做法,因为它允许您加载和 保存此模型的实例而不需要存储。还有,什么时候 多个商店使用相同的模型,您不必重新定义 代理他们中的每一个

使用门店代理:

在ExtJS4中,多个存储可以使用相同的数据模型,即使 商店将从不同的来源加载数据。在我们的例子中, 搜索结果和站点将使用站点模型 存储,两者都从不同的位置加载数据。返回 搜索结果,另一个返回用户最喜爱的电台。到 为此,我们的一家商店将需要覆盖代理 在模型上定义