如何将存储别名获取到视图层中的 extjs 处理程序
how to get store alias into extjs handler in view layer
我是 extjs 的新手,我正在尝试为 extjs mvc 编写一个示例。如果我在一个文件 app.js 中编写 mvc,它工作正常,但如果我分离到不同的文件(模型、视图和控制器),则数据正在填充,但事件监听器不工作:
下面是我的商店js:
Ext.define('Crud.store.Product',{
extend: 'Ext.data.Store',
alias:'widget.pStore',
model: 'Crud.model.Product',
autoLoad: true,
autoSync: true
});
问题出在视图js:
var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
Ext.define('Crud.view.Main',{
extend: 'Ext.grid.Panel',
renderTo: document.body,
plugins: [rowEditing],
width: 400,
height: 300,
frame: true,
title: 'Products',
alias:'pGrid',
store: 'Product',
columns: [{
text: 'ID',
width: 40,
sortable: true,
dataIndex: 'id'
}, {
text: 'Name',
flex: 1,
sortable: true,
dataIndex: 'name',
field: {
xtype: 'textfield'
}
}, {
header: 'Price',
width: 80,
sortable: true,
dataIndex: 'price',
field: {
xtype: 'textfield'
}
}],
dockedItems: [{
xtype: 'toolbar',
items: [{
text: 'Add',
iconCls: 'icon-add',
handler: function() {
// empty record
store.insert(0, new Product());
rowEditing.startEdit(0, 0);
}
}, '-', {
text: 'Delete',
iconCls: 'icon-delete',
handler: function() {
var selection = grid.getView().getSelectionModel().getSelection()[0];
if (selection) {
store.remove(selection);
}
}
}]
}]
});
in grid.getView().getSelectionModel().getSelection()[0]
,它说 grid is not defined 和 store not defined in store.insert(0,new Product())
相同].
在单个 js 文件中,如果我像下面这样创建变量,它就可以正常工作。
grid=Ext.create('Ext.grid.Panel',{
//view code
}
and store= Ext.create('Ext.data.Store',{
//store code
}
你能帮我如何获取商店和网格对象吗?
您必须从单击的按钮(处理程序的第一个参数)转到网格,然后从那里存储:
handler: function(btn) {
var grid = btn.up('grid'),
store = grid.getStore();
您可以将 storeId 分配给商店,并通过其 Id 获取商店。
创建商店时:
store= Ext.create('Crud.store.Product',{
storeId: 'some-store-id'
}
在事件处理程序中:
handler: function() {
var store = Ext.getStore('some-store-id');
}
我是 extjs 的新手,我正在尝试为 extjs mvc 编写一个示例。如果我在一个文件 app.js 中编写 mvc,它工作正常,但如果我分离到不同的文件(模型、视图和控制器),则数据正在填充,但事件监听器不工作: 下面是我的商店js:
Ext.define('Crud.store.Product',{
extend: 'Ext.data.Store',
alias:'widget.pStore',
model: 'Crud.model.Product',
autoLoad: true,
autoSync: true
});
问题出在视图js:
var rowEditing = Ext.create('Ext.grid.plugin.RowEditing');
Ext.define('Crud.view.Main',{
extend: 'Ext.grid.Panel',
renderTo: document.body,
plugins: [rowEditing],
width: 400,
height: 300,
frame: true,
title: 'Products',
alias:'pGrid',
store: 'Product',
columns: [{
text: 'ID',
width: 40,
sortable: true,
dataIndex: 'id'
}, {
text: 'Name',
flex: 1,
sortable: true,
dataIndex: 'name',
field: {
xtype: 'textfield'
}
}, {
header: 'Price',
width: 80,
sortable: true,
dataIndex: 'price',
field: {
xtype: 'textfield'
}
}],
dockedItems: [{
xtype: 'toolbar',
items: [{
text: 'Add',
iconCls: 'icon-add',
handler: function() {
// empty record
store.insert(0, new Product());
rowEditing.startEdit(0, 0);
}
}, '-', {
text: 'Delete',
iconCls: 'icon-delete',
handler: function() {
var selection = grid.getView().getSelectionModel().getSelection()[0];
if (selection) {
store.remove(selection);
}
}
}]
}]
});
in grid.getView().getSelectionModel().getSelection()[0]
,它说 grid is not defined 和 store not defined in store.insert(0,new Product())
相同].
在单个 js 文件中,如果我像下面这样创建变量,它就可以正常工作。
grid=Ext.create('Ext.grid.Panel',{
//view code
}
and store= Ext.create('Ext.data.Store',{
//store code
}
你能帮我如何获取商店和网格对象吗?
您必须从单击的按钮(处理程序的第一个参数)转到网格,然后从那里存储:
handler: function(btn) {
var grid = btn.up('grid'),
store = grid.getStore();
您可以将 storeId 分配给商店,并通过其 Id 获取商店。
创建商店时:
store= Ext.create('Crud.store.Product',{
storeId: 'some-store-id'
}
在事件处理程序中:
handler: function() {
var store = Ext.getStore('some-store-id');
}