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''));
});
});
}
});