2014-02-18 68 views
7

好的,我被困在ExtJs中应该是一个基本任务。我正在编写一个简单的登录脚本,用于将用户名和密码组合发送到RESTful Web服务,并在凭据正确时接收GUID。ExtJs模型代理与Store代理

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

就我的理解,模型表示单个记录,而商店用于处理包含多条记录的数据集。如果这是正确的,那么看起来Model代理就是要走的路。

继煎茶的在http://docs.sencha.com/extjs/4.2.1/#!/api/Ext.data.Model文档中的代码看起来是这样的:

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()方法的模型类是一个期望一个唯一标识符的静态调用。登录通常取决于两个因素,即用户名和密码。

所以看来,Store代理是在ExtJS中验证某人的用户名和密码凭证组合的唯一方法。有人可以验证和解释吗?任何帮助理解这一点将不胜感激。

回答

7

你只需要了解以下内容:

这家商店将使用它自己的代理,如果你为这个 实例配置之一,如果不是他把代理从模型。

因此,您可以轻松使用两种代理配置启用商店上的多CRUD操作以及模型上的单个CRUD操作。请注意,Model的静态加载方法需要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); 
} 

现在把这块,而不是负载应用会话模型。

2

,我发现它的煎茶的应用基础架构第2部分

使用委托书的模型文件中:

它总体上是好的做法要做到这一点,因为它可以让你加载和 保存此模型的实例不需要存储。另外,当多个商店使用同一个型号时,您不必在其中的每个商店上重新定义您的代理商 。

的商店使用代理服务器:

在Ext JS的4,多个店铺可以使用相同的数据模型,即使 门店将不同来源加载它们的数据。在我们的示例中, Station模型将由SearchResults和站 商店使用,它们都从不同位置加载数据。其中一个返回 搜索结果,另一个返回用户最喜爱的电台。若要实现此目标,我们的某个商店需要覆盖模型上定义的代理 。