当我可以在节点对象中看到Children时,我无法扩展树节点,并且当我尝试扩展时,它也可以触发TreeExpand事件。我也看不到工具栏和按钮。我尝试装饰模式obj,也尝试通过调用public class Customer
{
public bool Active { get; set; }
}
class Program : IDisposable
{
private readonly DbConnection _connection;
public Program()
{
_connection = DbOpen();
}
static void Main(string[] args)
{
SqlMapper.AddTypeMap(typeof(bool), DbType.Int32);
using (var program = new Program())
{
program.Run();
}
}
private void Run()
{
_connection.Execute($"INSERT INTO customers ( active ) VALUES (:Activate)", new { Activate = true });
_connection.Execute($"INSERT INTO customers ( active ) VALUES (:Activate)", new { Activate = false });
var customers = new List<Customer>()
{
new Customer() {Active = true},
new Customer() {Active = false}
};
_connection.Execute($"INSERT INTO customers ( active ) VALUES (:{nameof(Customer.Active)})", customers);
var results = _connection.Query<Customer>("SELECT * FROM customers");
foreach (var customer results)
{
Console.WriteLine($"{nameof(Customer.Active)} is {customer.Active}");
}
}
private static DbConnection DbOpen()
{
var connectionSetting = ConfigurationManager.ConnectionStrings["oracle"];
var dbFactory = DbProviderFactories.GetFactory(connectionSetting.ProviderName);
var conn = dbFactory.CreateConnection();
conn.ConnectionString = connectionSetting.ConnectionString;
conn.Open();
return conn;
}
public void Dispose()
{
_connection?.Dispose();
}
}
手动扩展树展开事件。
请帮我解决这个问题。
我的树形:
tree.expandTree(node.getPath())
这是我的回应obj:
Ext.define('puf.view.PI.OrgansitesTree', {
extend: 'Ext.tree.Panel',
alias: 'widget.organsitesTree',
id: 'organsitesTree',
itemId: 'organsitesTree',
requires: ['Ext.tree.Column', 'Ext.tree.View', 'Ext.toolbar.Toolbar'],
rowLines: true,
scrollable: 'vertical',
rootVisible: false,
initComponent: function() {
var me = this;
Ext.applyIf(me, {
nodesAndParents: null,
columns: [{
xtype: 'treecolumn',
dataIndex: 'title',
text: 'Title',
flex: 1
}],
listeners: {
checkchange: {
fn: me.onTreepanelCheckChange,
scope: me
}
},
viewConfig: {
},
dockedItems: [{
xtype: 'toolbar',
items: [{
xtype: 'triggerfield',
triggerCls: 'x-form-clear-trigger',
onTriggerClick: function() {
this.reset();
var tree = this.up('panel');
tree.clearFilter();
this.focus();
},
enableKeyEvents: true,
listeners: {
keyup: function(field, event) {
var k = event.getKey();
if (k == event.BACKSPACE) {
this.reset();
var tree = this.up('panel');
tree.clearFilter();
this.focus();
} else {
var v = this.getValue();
if (v.length <= 2)
return;
var tree = this.up('panel');
tree.filterBy(v, 'title');
}
},
buffer: 400
}
}, {
xtype: 'button',
text: 'Select All',
listeners: {
click: function() {
var tree = this.up('panel');
tree.treeSelect(this, true);
}
}
}, {
xtype: 'button',
text: 'Deselect All',
listeners: {
click: function() {
var tree = this.up('panel');
tree.treeSelect(this, false);
}
}
}],
dock: 'top'
}]
});
me.callParent(arguments);
},
onTreepanelCheckChange: function(node, checked, eOpts) {
node.cascadeBy(function(n) {
n.set('checked', checked);
});
if (checked) {
node.bubble(function(n) {
n.set('checked', checked);
});
} else {
node.bubble(function(n) {
var childNodes = this.childNodes;
var length = childNodes.length;
var allUnchecked = true;
for (var i = 0; i < length; i++) {
if (childNodes[i].get('checked')) {
allUnchecked = false;
break;
}
}
if (allUnchecked) {
n.set('checked', false);
}
});
}
node.fireEvent('customCheck');
},
treeSelect: function(caller, selected) {
/**
Tree select will select nodes
**/
var tree = caller.up('panel');
var view = tree.getView();
var me = this;
if (me.nodesAndParents === null) {
/* no search criteria given, select everything */
tree.getRootNode().cascadeBy(
function() {
if (this.data && !this.data.disabled &&
this.data.checked !== null)
this.set('checked', selected);
});
} else {
/* use the array nodesAndParents to determine what to selecdt */
tree.getRootNode().cascadeBy(
function(tree, view) {
var uiNode = view.getNodeByRecord(this);
if (uiNode &&
this.data &&
!this.data.disabled &&
this.data.checked !== null &&
Ext.Array.contains(me.nodesAndParents,
this.id)) {
this.set('checked', selected);
}
}, null, [caller, view]);
}
},
clearFilter: function() {
var view = this.getView();
var me = this;
this.getRootNode().cascadeBy(function(tree, view) {
var uiNode = view.getNodeByRecord(this);
if (uiNode) {
Ext.get(uiNode).setDisplayed('table-row');
}
}, null, [this, view]);
this.collapseAll();
me.nodesAndParents = null;
},
filterBy: function(text, by) {
/**
* Filter the tree on a string, hiding all nodes expect those which match and their parents.
* @param The term to filter on.
* @param The field to filter on (i.e. 'text').
-- Patch for Table.js ---
vi +858 src/view/Table.js
if (node == undefined) return -1;
*/
Ext.suspendLayouts();
try {
var view = this.getView(),
me = this;
me.clearFilter();
/* reset */
me.nodesAndParents = [];
// Find the nodes which match the search term, expand them.
// Then add them and their parents to nodesAndParents.
this.getRootNode().cascadeBy(
function(tree, view) {
var currNode = this;
if (currNode &&
currNode.data[by] &&
currNode.data[by].toString().toLowerCase()
.indexOf(text.toLowerCase()) > -1) {
me.expandPath(currNode.getPath());
while (currNode.parentNode) {
me.nodesAndParents.push(currNode.id);
currNode = currNode.parentNode;
}
}
}, null, [me, view]);
// Hide all of the nodes which aren't in nodesAndParents
this.getRootNode().cascadeBy(
function(tree, view) {
var uiNode = view.getNodeByRecord(this);
if (uiNode &&
!Ext.Array.contains(me.nodesAndParents,
this.id)) {
Ext.get(uiNode).setDisplayed('none');
}
}, null, [me, view]);
} catch (e) {
console.log(e);
}
Ext.resumeLayouts();
}
});