ExtJs ViewModel:传递变量而不是字符串

时间:2018-11-30 11:53:29

标签: extjs extjs6-modern

我有一个ExtJs ViewModel,我尝试在其中使用fomulas。以下代码按预期工作:

viewModel: {
    formulas: {
        isPressed: function (get) {
            return get('state.attribute');
        }
    }
}

调试器在此公式中暂停两次。一次在打开视图时,一次在状态和属性初始化时。

但是,如果我尝试这样做:

viewModel: {
    formulas: {
        isPressed: function (get) {
            var x = 'state.attribute';
            return get(x);
        }
    }
}

仅在打开视图时调试器才会停止,而在初始化所有内容时,调试器将不会第二次停止。

修改

我尝试执行以下操作。在我的组件中,我有这个config

config: {
    target: null
}

target在我的父视图中包含一个类似'state.property'的字符串,其中包含该组件。现在在此组件中,我想绑定到target的值,但不想写:

formulas: {
    isPressed: {
        bind: '{state.property'},
        get: function(property) { ... }
    }
}

因为要绑定的值应该是动态的。我想在不同的地方重用该组件。所以我尝试了一下,但是没用:

viewModel: {
    formulas: {
        isPressed: function (get) {
            return get(this.getView().getTarget());
        }
    }
}

1 个答案:

答案 0 :(得分:1)

发生这种情况的原因是因为它解析了函数的内容以找出依赖关系。但是,它仅使用一个非常幼稚的解析器,因此不会像您描述的那样处理。您可以使用bindTo明确指定依赖项:

const viewModel = new Ext.app.ViewModel({
    formulas: {
        isNameModified: {
            bind: {
                bindTo: '{theUser}',
                deep: true
            },
            get: user => user.foo
        }
    },
    data: {
        theUser: {
            foo: 1
        }
    }
});