0

フロントエンドには、ユーザーと注文の 2 つのモデル ストアと接続されたストアがあります。バックエンドには、getOrder(orderId) と getOrders() の 2 つの API 呼び出しがあります。「オーダー ストア」では、getOrders() のプロキシ設定を指定しました。「注文モデル」では、getOrder(orderId) のプロキシを指定しました。この場合、関連付けられた注文を取得するためにユーザーの load メソッドを呼び出すと、モデルのプロキシが使用されます。ストアからのプロキシを使用しないのはなぜですか? 使わない理由。

PS: ユーザーと注文の関係はバックエンドで記述され、ユーザーの認証パラメーターに依存します。

ユーザーモデルコード

Ext.define('Dev.models.User', {
  extend: 'Ext.data.Model',
  requires: ['Dev.stores.Orders'],
  fields: [
    //data
    {name: "name", type: "string"},
    {name: "userId", type: "string"}
  ],

  proxy: {
    type: 'ajax',
    url: '/tcc/getmember',
    idParam: 'memberId',

    reader: {
      type: 'json',
      idProperty : 'memberId'
    }
  },

  hasMany: {
    model: 'Dev.models.Order',
    name: 'orders',
    storeConfig: {
      type: 'orders',
      filters: []
    }
  }
});

注文型式

Ext.define('Dev.models.Order', {
  extend: 'Ext.data.Model',
  idProperty : 'orderId',
  fields: [
    {name: "orderId",   type: "string"},
    {name: "title",     type: "string"},
    {name: "createMember",     type: "string"}
  ],

  proxy: {
    type: 'ajax',
    api: {
      create: '/tcc/setorder',
      read: '/tcc/getorder',
      update: '/tcc/setorder',
      destroy: '/tcc/deleteorder'
    },
    idParam : 'orderId',
    reader: {
      type: 'json',
      idProperty : 'orderId'
    }
  },

  belongsTo: {
    model: "Dev.models.User",
    name: 'user',
    getterName: 'getUser',
    foreignKey: 'userId',
    primaryKey: 'createMember'
  }
});

注文店舗コード

Ext.define('Dev.stores.Orders', {
extend: 'Ext.data.Store',
model : 'Dev.models.Order',
alias: 'store.orders',
proxy : {
  type : 'ajax',
    api: {
      create: '/tcc/setorder',
      read: '/tcc/getorders',
      update: '/tcc/setorder',
      destroy: '/tcc/deleteorder'
    },
    reader : {
      root: 'orders',
      type : 'json',
      idProperty : 'orderId'
    }
  }
});

使用例

function doMemberOne(userId) {
  Dev.models.User.load(userId, {
    success: function(record, operation) {
      console.log("User model was loaded successfully");
      doOrders(record.orders());
    },
    failure: function(record, operation) {
      console.log("User model was loaded unsuccessfully");
    }
  });
}

function doOrders(orderStore) {
  orderStore.load({
    callback: function(records, operation, success) {
      if (success) {
        console.log("Orders was loaded successfully");
      } else {
        console.log("Orders was loaded unsuccessfully");
      }
    }
  });
}

Ext.onReady(function() {
  Dev.Authentication.login("admin", "adminpass", "adminorg");
  Dev.Authentication.on('login', function(resp) {
    console.log("Login is successful.");
    doMemberOne(resp.accountid);
  });
});
4

0 に答える 0