Javascript ExtJS-如何使用代理、模型?它们有什么关系?

Javascript ExtJS-如何使用代理、模型?它们有什么关系?,javascript,model,proxy,extjs4,store,Javascript,Model,Proxy,Extjs4,Store,我一直在努力学习与模特和商店打交道。但是代理位让我很困惑。所以我将在这里列出我的理解-请指出我理解中的差距 我的理解 模型用于表示域对象 模型可以由ModelManager创建,也可以简单地使用构造函数创建 模型保存在商店中 存储可以是内存存储,也可以是服务器存储。这是使用代理服务器配置的 代理告诉存储如何与支持存储通信——可以是JSON数组、REST资源,也可以是通过ajax简单配置的URL 商店负责存储模型,代理负责控制/帮助完成该任务 更改模型的值时,将设置其dirty标志。在保存模型时,

我一直在努力学习与模特和商店打交道。但是代理位让我很困惑。所以我将在这里列出我的理解-请指出我理解中的差距

我的理解
  • 模型用于表示域对象
  • 模型可以由ModelManager创建,也可以简单地使用构造函数创建
  • 模型保存在商店中
  • 存储可以是内存存储,也可以是服务器存储。这是使用代理服务器配置的
  • 代理告诉存储如何与支持存储通信——可以是JSON数组、REST资源,也可以是通过ajax简单配置的URL
  • 商店负责存储模型,代理负责控制/帮助完成该任务
  • 更改模型的值时,将设置其
    dirty
    标志。在保存模型时,它会自动清除。(稍后将对此进行详细介绍)
  • 让我困惑的部分
  • 为什么模型上有
    代理
    配置和
    保存
    方法?我知道模型只能存储在商店中
  • 为什么在我将模型对象添加到存储时,
    dirty
    标记没有被清除
  • 当我将一个模型对象添加到一个存储中时,为什么该模型不获取用该存储配置的代理
  • proxy
    是模型的静态配置。这是否意味着我们不能使用具有多个数据源的特定模型的对象?从广义上讲,这是否意味着一个模型有多个存储区基本上是无用的
  • 当我们定义一个存储时,我们是在定义一个类(存储类型,如果我们可以这样称呼它的话),还是在定义一个存储的实例?我要问的原因是,当我们声明一个网格时,我们只需将一个存储配置传递给它,作为
    store:'MyApp.store.MyStore'
    ——网格是实例化这种类型的网格,还是仅仅使用我们已经实例化的存储
  • 谢谢

    PS:+50悬赏给解释这一切的人:)-将在48小时结束后提供悬赏。

    说:

    模型表示应用程序管理的某个对象

    存储只是模型实例的集合-通常从某个服务器加载


    模型保存在商店中

    不仅如此。这些模型可以单独使用(f.i.用于用数据填充表单。有关更多信息,请查看)

    为什么模型上有代理配置和保存方法?我知道模型只能存储在商店中

    正如我所说,不仅如此

    为什么在我将模型对象添加到存储时,脏标志没有被清除

    为什么要这样做?只有当记录与服务器端的相应记录同步时,记录才会变为干净

    当我将一个模型对象添加到一个存储中时,为什么该模型不获取用该存储配置的代理

    这也是因为模型可以在没有存储的情况下使用

    代理是模型的静态配置。这是否意味着我们不能使用具有多个数据源的特定模型的对象

    我们不能使用特定模型的对象,但可以对多个存储使用一个模型定义。例如:

    Ext.define('MyModel', {
      // ... config
    });
    var store1 = Ext.create('Ext.data.Store', {
      model: 'MyModel',
      // ... config
      proxy: {
        // ...
        // this proxy will be used when store1.sync() and store1.load() are called
      }
      // ...
    });
    // ...
    var storeN = Ext.create('Ext.data.Store', {
      model: 'MyModel',
      // ... config
      proxy: {
        // ...
        // this proxy will be used when storeN.sync() and storeN.load() are called
      }
      // ...
    });
    
    由于store1和storeN使用不同的代理,这些存储所包含的记录可能完全不同

    当我们定义一个存储时,我们是在定义一个类(存储类型,如果我们可以这样称呼它的话),还是在定义一个存储的实例

    是的,当我们定义一个存储时,我们就是在定义一个类

    我问的原因是,当我们声明一个网格时,我们只需将一个存储配置传递给它作为存储:“MyApp.store.MyStore”-网格是实例化了这种类型的网格,还是仅仅使用了我们已经实例化的存储

    有两种方法可以设置网格的存储配置:

  • store:existingStore,
  • store:'someStoresId',
  • store:'MyApp.store.MyStore',
  • 在第一种和第二种情况下,将使用现有的商店实例。在第三种情况下,将使用新创建的
    'MyApp.store.MyStore'
    实例。所以,
    store:'MyApp.store.MyStore',
    等于

      var myStore = Ext.create('MyApp.store.MyStore', {});
      // ... 
        // the following - is in a grid's config:
        store: myStore,
    

    更新


    将模型添加到存储中,然后调用存储的sync()时,为什么不清除模型的脏标志

    除非读卡器、写卡器和服务器响应设置不正确,否则应清除该选项。退房商店的sync()上自动清除脏标志


    如果一个模型类根本没有任何代理,为什么它要跟踪它的脏状态

    让您知道自创建时起记录是否已更改


    引入模型与服务器同步的概念可以实现什么

    假设您正在创建一个小部件,其中包含一组简单的输入。此输入的值可以从db加载(这组输入表示db表中的一行)。当用户更改输入值时,应将数据发送到服务器。这些数据可以存储在一个记录中

    那么,这个接口将使用什么:一条记录还是只有一条记录的存储

    独立模型-用于表示db表中一行的小部件。

    Store-用于表示db表中一组行的小部件。

    我来自ExtJS 2.2[sic]到4,模型行为和术语也让我陷入了一个循环

    我能找到的最好的快速解释来自Sencha博客上的“ExtJS4倒计时”系列。结果是一个模型之所以表现得像它,是因为它“真的”是一个记录。

    数据包的核心是Ext.data.Model。模型 表示应用程序中的某种类型的数据,例如 电子商务应用程序可能有针对用户、产品和订单的模型。在 最简单的模型就是一组字段及其数据。任何人 熟悉Ext JS 3会吗
    GET /people/1 <<< That's what's used to retrieve a single record into Model
    
    DELETE /people/2
    
    POST /people/7?_method=DELETE