3

所以我试图将项目动态地放到具有slidenavigation功能的面板中:

// FlyoutNavigation.js
Ext.define("APN.view.FlyoutNavigation", {
    id: "flyoutNavigationPanel",
    扩展:'Ext.ux.slidenavigation.View',

这是view在另一个视图中的初始化:

        // MainViewContainer.js
        this.home = "一些变量"
        this.flyout = Ext.create('APN.view.FlyoutNavigation', {
            id: 'flyoutNavigationPanel',
            家:this.home
        });

比我在本this.config.items节中尝试使用这个变量,但是这不起作用,似乎 Sencha 先编译所有内容,然后初始化组件,我可能错了,我真的是 Sencha 框架的新手。

所以这里是home使用变量的视图:

Ext.define("APN.view.FlyoutNavigation", {
    id: "flyoutNavigationPanel",
    扩展:'Ext.ux.slidenavigation.View',
    xtype: 'flyoutnavigation',
    要求:[
...省略了很多东西...
    ],
    初始化:函数(){
        this.callParent();  
        this.setupDynamicItems();
    },
    配置:{
        项目: [
            {
                itemId: 'nav_home',
                id: 'homeView',
                项目: [{
                        xtype: '文章列表',
                        id: '最新消息',
                        feedUrlName: this.home, // - 那就是 UNDEFINED 出现的地方
                        弹性:1
                    }
                ],
            },

所以this.home未定义...

一个可能的解决方案 来自这个问题:如何在 Sencha Touch 中动态创建 xtype 模板

我决定把所有的代码都放进去,this.config.items.add({ ... my items ... })但是Ext.ux.slidenavigation.View看起来给了我BUG!:( 因为初始化方法发生在FlyoutNavigation视图项的绑定方法之后。

这是来自错误的消息:Uncaught TypeError: Cannot read property 'raw' of undefined View.js:310基本上是这一行:if (Ext.isFunction(item.raw.handler)) {

所以我的问题是

  1. 如何在 config.items 部分获取实例变量?如果那是可能的,那一切都还好
  2. 或者你知道这个问题的解决方法吗?

谢谢

4

1 回答 1

3

我不认为你可以this.config在定义类时使用,而是可以使用我之前告诉你的初始化函数。所以你应该能够做到这一点:

initialize : function() {
    var me = this;
    var home = me.config.home;
    me.add({
        itemId: 'nav_home',
        id: 'homeView',
        items: [{
                xtype: 'articlelist',
                id: 'latestNews',
                feedUrlName: home,
                flex: 1
            }
        ],
    });
}

或者,如果您已homeView在父类中定义,您可以这样做:

initialize : function() {
    var me = this;
    var home = me.config.home;
    me.down('#homeView').add({
        xtype: 'articlelist',
        id: 'latestNews',
        feedUrlName: home,
        flex: 1
    });
}
于 2013-05-20T09:03:09.577 回答