EXTJS5使用ViewModel为Tree组件配置store

jacob_earl 2014-11-06 11:00:24
用的是EXTJS5,想使用viewModel中的stores为Tree组件直接绑定store,但是似乎MainModel里配置的lefttreestore好像没有继承Ext.data.TreeStore,当我不写getRoot时,他就报错说getRoot is not a function,当我写上getRoot时,又报如下错误.
各配置相关如下:
MainModel配置如下:

后台返回的数据如下:

Tree的配置如下:

报错如下:
...全文
908 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zggaoshou 2015-04-30
  • 打赏
  • 举报
回复
请问你这问题解决了吗,怎么解决的啊?
jacob_earl 2014-11-24
  • 打赏
  • 举报
回复
引用 13 楼 waiting_hao 的回复:
查了一下文档,treepanel的store配置项不支持Json,只能为 Ext.data.TreeStore对象。 http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.tree.Panel-cfg-store 关键源代码如下:

        if (Ext.isString(store)) {
            store = me.store = Ext.StoreMgr.lookup(store);
        } else if (!store || !store.isStore) {
            store = Ext.apply({
                type: 'tree',
                root: me.root,
                fields: me.fields,
                model: me.model,
                proxy: 'memory',
                folderSort: me.folderSort
            }, store);
            store = me.store = Ext.StoreMgr.lookup(store);
        } else if (me.root) {
            store = me.store = Ext.data.StoreManager.lookup(store);
            store.setRoot(me.root);
            if (me.folderSort !== undefined) {
                store.folderSort = me.folderSort;
                store.sort();
            }
        }
感觉你说的对,viewModel里的stores好像是一个装载该组件所需的store的所在地,本身并无法识别他是TreeStore还是其他store,所以很多原有的TreeStore中的方法都不能使用才会报错,就跟父类无法使用和找到子类的方法方法一样~~太感谢你了~~
waiting_hao 2014-11-17
  • 打赏
  • 举报
回复
引用 15 楼 jacob_earl 的回复:
[quote=引用 13 楼 waiting_hao 的回复:]
查了一下文档,treepanel的store配置项不支持Json,只能为 Ext.data.TreeStore对象。

http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.tree.Panel-cfg-store

关键源代码如下:


if (Ext.isString(store)) {
store = me.store = Ext.StoreMgr.lookup(store);
} else if (!store || !store.isStore) {
store = Ext.apply({
type: 'tree',
root: me.root,
fields: me.fields,
model: me.model,
proxy: 'memory',
folderSort: me.folderSort
}, store);
store = me.store = Ext.StoreMgr.lookup(store);
} else if (me.root) {
store = me.store = Ext.data.StoreManager.lookup(store);
store.setRoot(me.root);
if (me.folderSort !== undefined) {
store.folderSort = me.folderSort;
store.sort();
}
}

亲,能详细说明一下问题吗?[/quote]

你看一下这个结构:

你这种看看还有没有问题。
文档:http://docs.sencha.com/extjs/5.0/application_architecture/application_architecture.html
jacob_earl 2014-11-17
  • 打赏
  • 举报
回复
引用 13 楼 waiting_hao 的回复:
查了一下文档,treepanel的store配置项不支持Json,只能为 Ext.data.TreeStore对象。 http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.tree.Panel-cfg-store 关键源代码如下:

        if (Ext.isString(store)) {
            store = me.store = Ext.StoreMgr.lookup(store);
        } else if (!store || !store.isStore) {
            store = Ext.apply({
                type: 'tree',
                root: me.root,
                fields: me.fields,
                model: me.model,
                proxy: 'memory',
                folderSort: me.folderSort
            }, store);
            store = me.store = Ext.StoreMgr.lookup(store);
        } else if (me.root) {
            store = me.store = Ext.data.StoreManager.lookup(store);
            store.setRoot(me.root);
            if (me.folderSort !== undefined) {
                store.folderSort = me.folderSort;
                store.sort();
            }
        }
亲,能详细说明一下问题吗?
waiting_hao 2014-11-13
  • 打赏
  • 举报
回复
试了一下,Json配置是可以的,以你现在给的代码我找不出问题了。
waiting_hao 2014-11-13
  • 打赏
  • 举报
回复
查了一下文档,treepanel的store配置项不支持Json,只能为 Ext.data.TreeStore对象。 http://docs.sencha.com/extjs/5.0/apidocs/#!/api/Ext.tree.Panel-cfg-store 关键源代码如下:

        if (Ext.isString(store)) {
            store = me.store = Ext.StoreMgr.lookup(store);
        } else if (!store || !store.isStore) {
            store = Ext.apply({
                type: 'tree',
                root: me.root,
                fields: me.fields,
                model: me.model,
                proxy: 'memory',
                folderSort: me.folderSort
            }, store);
            store = me.store = Ext.StoreMgr.lookup(store);
        } else if (me.root) {
            store = me.store = Ext.data.StoreManager.lookup(store);
            store.setRoot(me.root);
            if (me.folderSort !== undefined) {
                store.folderSort = me.folderSort;
                store.sort();
            }
        }
waiting_hao 2014-11-13
  • 打赏
  • 举报
回复
引用 10 楼 jacob_earl 的回复:
[quote=引用 9 楼 waiting_hao 的回复:] [quote=引用 7 楼 jacob_earl 的回复:] [quote=引用 6 楼 waiting_hao 的回复:] [quote=引用 5 楼 jacob_earl 的回复:] [quote=引用 4 楼 waiting_hao 的回复:]
item是root~~说root里的很多方法找不到 [/quote] 截个图看看。 你为什么要把store放到ViewModel里?[/quote] 感觉这样以后要修改什么数据直接在viewModel里修改就可以了~~并且这个不是5才有的么,所以就想试试~~我看网上有例子,都是直接在initComponent里遍历,多个循环嵌套,感觉这样如果我改变了json串的结构,比如有的菜单3层,有的4层,还得修改initComponent,所以就直接放到viewModel里了[/quote] 我不明白有什么要在initComponent里遍历还循环嵌套的。[/quote] 那比如我想写一个tree,应该怎么写呢?在哪里初始化store呢?[/quote] 所有store都在store文件夹内定义,在tree里初始化
jacob_earl 2014-11-11
  • 打赏
  • 举报
回复
引用 8 楼 waiting_hao 的回复:
[quote=引用 7 楼 jacob_earl 的回复:]
[quote=引用 6 楼 waiting_hao 的回复:]
[quote=引用 5 楼 jacob_earl 的回复:]
[quote=引用 4 楼 waiting_hao 的回复:]


item是root~~说root里的很多方法找不到
[/quote]

截个图看看。
你为什么要把store放到ViewModel里?[/quote]
感觉这样以后要修改什么数据直接在viewModel里修改就可以了~~并且这个不是5才有的么,所以就想试试~~我看网上有例子,都是直接在initComponent里遍历,多个循环嵌套,感觉这样如果我改变了json串的结构,比如有的菜单3层,有的4层,还得修改initComponent,所以就直接放到viewModel里了[/quote]

Store应该在app/store文件夹内用Ext.define定义,ViewModel作用只是分离出在View上面要经常修改的配置,如果title什么的吧。如果按你这么说ViewModel就没用了,你在里面定义那么复杂的东西,跟单独js文件定义就没区别了,用起来还麻烦。[/quote]
这是详细截图,求问,有没有更好的方式~~~



jacob_earl 2014-11-10
  • 打赏
  • 举报
回复
引用 6 楼 waiting_hao 的回复:
[quote=引用 5 楼 jacob_earl 的回复:] [quote=引用 4 楼 waiting_hao 的回复:]
item是root~~说root里的很多方法找不到 [/quote] 截个图看看。 你为什么要把store放到ViewModel里?[/quote] 感觉这样以后要修改什么数据直接在viewModel里修改就可以了~~并且这个不是5才有的么,所以就想试试~~我看网上有例子,都是直接在initComponent里遍历,多个循环嵌套,感觉这样如果我改变了json串的结构,比如有的菜单3层,有的4层,还得修改initComponent,所以就直接放到viewModel里了
waiting_hao 2014-11-10
  • 打赏
  • 举报
回复
引用 5 楼 jacob_earl 的回复:
[quote=引用 4 楼 waiting_hao 的回复:]
item是root~~说root里的很多方法找不到 [/quote] 截个图看看。 你为什么要把store放到ViewModel里?
jacob_earl 2014-11-10
  • 打赏
  • 举报
回复
引用 4 楼 waiting_hao 的回复:


item是root~~说root里的很多方法找不到
jacob_earl 2014-11-10
  • 打赏
  • 举报
回复
引用 9 楼 waiting_hao 的回复:
[quote=引用 7 楼 jacob_earl 的回复:] [quote=引用 6 楼 waiting_hao 的回复:] [quote=引用 5 楼 jacob_earl 的回复:] [quote=引用 4 楼 waiting_hao 的回复:]
item是root~~说root里的很多方法找不到 [/quote] 截个图看看。 你为什么要把store放到ViewModel里?[/quote] 感觉这样以后要修改什么数据直接在viewModel里修改就可以了~~并且这个不是5才有的么,所以就想试试~~我看网上有例子,都是直接在initComponent里遍历,多个循环嵌套,感觉这样如果我改变了json串的结构,比如有的菜单3层,有的4层,还得修改initComponent,所以就直接放到viewModel里了[/quote] 我不明白有什么要在initComponent里遍历还循环嵌套的。[/quote] 那比如我想写一个tree,应该怎么写呢?在哪里初始化store呢?
waiting_hao 2014-11-10
  • 打赏
  • 举报
回复
引用 7 楼 jacob_earl 的回复:
[quote=引用 6 楼 waiting_hao 的回复:] [quote=引用 5 楼 jacob_earl 的回复:] [quote=引用 4 楼 waiting_hao 的回复:]
item是root~~说root里的很多方法找不到 [/quote] 截个图看看。 你为什么要把store放到ViewModel里?[/quote] 感觉这样以后要修改什么数据直接在viewModel里修改就可以了~~并且这个不是5才有的么,所以就想试试~~我看网上有例子,都是直接在initComponent里遍历,多个循环嵌套,感觉这样如果我改变了json串的结构,比如有的菜单3层,有的4层,还得修改initComponent,所以就直接放到viewModel里了[/quote] 我不明白有什么要在initComponent里遍历还循环嵌套的。
waiting_hao 2014-11-10
  • 打赏
  • 举报
回复
引用 7 楼 jacob_earl 的回复:
[quote=引用 6 楼 waiting_hao 的回复:] [quote=引用 5 楼 jacob_earl 的回复:] [quote=引用 4 楼 waiting_hao 的回复:]
item是root~~说root里的很多方法找不到 [/quote] 截个图看看。 你为什么要把store放到ViewModel里?[/quote] 感觉这样以后要修改什么数据直接在viewModel里修改就可以了~~并且这个不是5才有的么,所以就想试试~~我看网上有例子,都是直接在initComponent里遍历,多个循环嵌套,感觉这样如果我改变了json串的结构,比如有的菜单3层,有的4层,还得修改initComponent,所以就直接放到viewModel里了[/quote] Store应该在app/store文件夹内用Ext.define定义,ViewModel作用只是分离出在View上面要经常修改的配置,如果title什么的吧。如果按你这么说ViewModel就没用了,你在里面定义那么复杂的东西,跟单独js文件定义就没区别了,用起来还麻烦。
waiting_hao 2014-11-09
  • 打赏
  • 举报
回复

waiting_hao 2014-11-09
  • 打赏
  • 举报
回复
引用 2 楼 jacob_earl 的回复:
[quote=引用 1 楼 waiting_hao 的回复:] 你断点看看错误提示的item变量是什么。
追踪不到啊~~定位的时候,走完getRoot()方法之后,就跳到他自己的类库中去了~~一直都没看到item~~~[/quote] 你在Sources选项卡中点最右边那个"Pause on exceptions"按钮,点成蓝色,然后运行到ext的代码异常的地方会自动断点,不用手动跟,看看item是什么对象才能找到问题。
jacob_earl 2014-11-07
  • 打赏
  • 举报
回复
引用 1 楼 waiting_hao 的回复:
你断点看看错误提示的item变量是什么。
追踪不到啊~~定位的时候,走完getRoot()方法之后,就跳到他自己的类库中去了~~一直都没看到item~~~
waiting_hao 2014-11-06
  • 打赏
  • 举报
回复
你断点看看错误提示的item变量是什么。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧