Extjs tree store set leaf 属性 value based on children 属性 值
Extjs tree store set leaf property value based on children property
我正在使用 TreeStore 加载如下所示的数据:
{
"categories": [{
"text": "Ext JS",
"expanded": "true",
"categories": [{
"text": "app",
"categories": [{
"text": "Application.js",
"categories": "null"
}]
},
{
"text": "button",
"expanded": "true",
"categories": [{
"text": "Button.js",
"categories": "null"
},
{
"text": "Cycle.js",
"categories": "null"
},
{
"text": "Split.js",
"categories": "null"
}]
}
]
}]
}
我想要的是在类别 属性 是否为 null 时将叶子 属性 设置为 true 或 false。
我的模型看起来像这样:
Ext.define('TestTree.model.MyModel', {
extend: 'Ext.data.Model',
requires: [
'Ext.data.field.Boolean'
],
fields: [
{
name: 'text'
},
{
type: 'boolean',
name: 'leaf'
}
]
});
我的想法是为此使用叶字段的计算配置,但如果我尝试使用 data.get('categories') 我得到 字段叶取决于未定义的字段get 并且如果我尝试在我的模型中定义字段 categories 并使用 data.categories,什么也不会发生。
我不知道我错过了什么!
我的商店是这样的:
Ext.define('TestTree.store.MyTreeStore', {
extend: 'Ext.data.TreeStore',
requires: [
'TestTree.model.MyModel',
'Ext.data.proxy.Ajax',
'Ext.data.reader.Json'
],
constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.apply({
storeId: 'MyTreeStore',
autoLoad: true,
model: 'TestTree.model.MyModel',
proxy: {
type: 'ajax',
url: 'resources/data/treeData.json',
reader: {
type: 'json',
rootProperty: 'categories'
}
}
}, cfg)]);
}
});
谢谢!
使用以下初始化方法创建模型:
Ext.define("Files", {
extend : "Ext.data.Model",
fields : [{
name: 'categories'
},{
name: 'leaf',
convert : function(value, record) {
return record.get('categories') == 'null';
}
}]
});
这应该可以解决您的问题,这里是 fiddle,您可以看一看:https://fiddle.sencha.com/#fiddle/gq8
我用 calculate
而不是 convert
。
来自doc
Using calculate is the simplest and safest way to define a calculated field.
所以代码变成了
Ext.define("Files", {
extend : "Ext.data.Model",
fields : [{
name: 'categories'
},{
name: 'leaf',
calculate : function(data) {
return data.categories === null;
},
depends: ['categories']
}]
});
我正在使用 TreeStore 加载如下所示的数据:
{
"categories": [{
"text": "Ext JS",
"expanded": "true",
"categories": [{
"text": "app",
"categories": [{
"text": "Application.js",
"categories": "null"
}]
},
{
"text": "button",
"expanded": "true",
"categories": [{
"text": "Button.js",
"categories": "null"
},
{
"text": "Cycle.js",
"categories": "null"
},
{
"text": "Split.js",
"categories": "null"
}]
}
]
}]
}
我想要的是在类别 属性 是否为 null 时将叶子 属性 设置为 true 或 false。 我的模型看起来像这样:
Ext.define('TestTree.model.MyModel', {
extend: 'Ext.data.Model',
requires: [
'Ext.data.field.Boolean'
],
fields: [
{
name: 'text'
},
{
type: 'boolean',
name: 'leaf'
}
]
});
我的想法是为此使用叶字段的计算配置,但如果我尝试使用 data.get('categories') 我得到 字段叶取决于未定义的字段get 并且如果我尝试在我的模型中定义字段 categories 并使用 data.categories,什么也不会发生。 我不知道我错过了什么! 我的商店是这样的:
Ext.define('TestTree.store.MyTreeStore', {
extend: 'Ext.data.TreeStore',
requires: [
'TestTree.model.MyModel',
'Ext.data.proxy.Ajax',
'Ext.data.reader.Json'
],
constructor: function(cfg) {
var me = this;
cfg = cfg || {};
me.callParent([Ext.apply({
storeId: 'MyTreeStore',
autoLoad: true,
model: 'TestTree.model.MyModel',
proxy: {
type: 'ajax',
url: 'resources/data/treeData.json',
reader: {
type: 'json',
rootProperty: 'categories'
}
}
}, cfg)]);
}
});
谢谢!
使用以下初始化方法创建模型:
Ext.define("Files", {
extend : "Ext.data.Model",
fields : [{
name: 'categories'
},{
name: 'leaf',
convert : function(value, record) {
return record.get('categories') == 'null';
}
}]
});
这应该可以解决您的问题,这里是 fiddle,您可以看一看:https://fiddle.sencha.com/#fiddle/gq8
我用 calculate
而不是 convert
。
来自doc
Using calculate is the simplest and safest way to define a calculated field.
所以代码变成了
Ext.define("Files", {
extend : "Ext.data.Model",
fields : [{
name: 'categories'
},{
name: 'leaf',
calculate : function(data) {
return data.categories === null;
},
depends: ['categories']
}]
});