ruby-on-rails extjs grid jsonstore

ruby on rails - extjs anidados json store rails



ruby-on-rails grid (2)

Puede usar anular el método de representación predeterminado. Defina un método de representación para la columna.

renderer: function(value, metaData, record, rowIndex, colIndex, store) { // you can use record.get method to access the data you require return the_retrived_data; }

Debe usar la propiedad de mapping para mapear los campos de su tienda json al json anidado. Por ejemplo, si necesita acceder al nombre del producto, puede tener:

{name: ''productname'', mapping: ''products.prodnm''}

También puede usar la notación de matriz en lugar del operador de punto. ex: "products[''prodnm'']" .

Estoy trabajando con Ext JS & Rails como backend. Tengo una base de datos myysql que tiene una relación padre-hijo, es decir, una relación de uno a muchos ... Quiero una tienda JSON "única" que se pueda usar para cargar "GRID" datos con registros padre e hijo ... También hay alguna manera de vincular ambos, tanto el formulario como la cuadrícula a la misma tienda, pero con diferentes jsonreaders? es decir, el lector de datos del formulario leería la cadena con la raíz: ''clientes'' y la grilla leerá la cadena con la raíz: ''productos'' ? El JSON se ve así:

{ "customers": [{ "amt": 8000, "custnm": "rashmi", "id": 2, "purdt": "2011-04-27", "products": [{ "amt": 40, "customer_id": 2, "id": 3, "prodnm": "oil", "qty": 1, "rate": 40 }] }, { "amt": 300000, "custnm": "bhumika", "id": 3, "purdt": "2011-04-14", "products": [{ "amt": 40, "customer_id": 3, "id": 1, "prodnm": "soap", "qty": 20000, "rate": 20 }, { "amt": 150, "customer_id": 3, "id": 2, "prodnm": "shampoo", "qty": 3000, "rate": 50 }, { "amt": null, "customer_id": 3, "id": 14, "prodnm": "aa", "qty": 2, "rate": null }] }, { "amt": 15000, "custnm": "Shruti", "id": 13, "purdt": "2011-04-08", "products": [] }, { "amt": 200000, "custnm": "Jayesh", "id": 14, "purdt": "2011-03-31", "products": [] }, { "amt": 220000, "custnm": "SHRUTI", "id": 15, "purdt": "2011-04-06", "products": [] }, { "amt": 10000, "custnm": "RASHMI", "id": 24, "purdt": "2011-04-06", "products": [] }], "results": 6 }


El nuevo Ext JS 4 tiene asociaciones de modelos que resolverán el problema ( http://docs.sencha.com/ext-js/4-0/guide/data )

// each User hasMany Orders Ext.define(''User'', { extend: ''Ext.data.Model'', fields: [''id'', ''name'', ''email''], proxy : { type: ''rest'', url : ''/users'', reader: ''json'' }, hasMany: ''Orders'' }); // each Order belongsTo a User, and hasMany OrderItems Ext.define(''Order'', { extend: ''Ext.data.Model'', fields: [''id'', ''user_id'', ''status''], belongsTo: ''User'', hasMany: ''OrderItems'' }); // each OrderItem belongsTo an Order Ext.define(''OrderItem'', { extend: ''Ext.data.Model'', fields: [''id'', ''order_id'', ''name'', ''description'', ''price'', ''quantity''], belongsTo: ''Order'' });

Al llamar a user.orders () se devuelve una tienda configurada con el modelo Orders, porque el modelo User definió una asociación de hasMany: ''Orders''.

User.load(123, { success: function(user) { //we can iterate over the orders easily using the Associations API user.orders().each(function(order) { console.log(order.get(''status'')); //we can even iterate over each Order''s OrderItems: order.orderItems().each(function(orderItem) { console.log(orderItem.get(''title'')); }); }); } });