Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ExtJs ViewModel:传递变量而不是字符串_Extjs_Extjs6 Modern - Fatal编程技术网

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

ExtJs ViewModel:传递变量而不是字符串,extjs,extjs6-modern,Extjs,Extjs6 Modern,我有一个ExtJs视图模型,我尝试使用公式。以下代码按预期工作: viewModel: { formulas: { isPressed: function (get) { return get('state.attribute'); } } } 调试器在此公式中暂停两次。打开视图时一次,初始化状态和属性时一次 但如果我尝试这样做: viewModel: { formulas: { isPressed

我有一个ExtJs视图模型,我尝试使用公式。以下代码按预期工作:

viewModel: {
    formulas: {
        isPressed: function (get) {
            return get('state.attribute');
        }
    }
}
调试器在此公式中暂停两次。打开视图时一次,初始化状态和属性时一次

但如果我尝试这样做:

viewModel: {
    formulas: {
        isPressed: function (get) {
            var x = 'state.attribute';
            return get(x);
        }
    }
}
调试器仅在打开视图时停止,而不是在第二次初始化所有内容时停止

编辑

我试图做到以下几点。在我的组件中,我有以下配置:

目标包含来自包含组件的父视图的类似“state.property”的字符串。现在在这个组件中,我希望绑定到target的值,但不想写入:

formulas: {
    isPressed: {
        bind: '{state.property'},
        get: function(property) { ... }
    }
}
因为要绑定到的值应该是动态的。我想在不同的地方重用组件。所以我尝试了这个,但没有成功:

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

发生这种情况的原因是,它解析函数的内容以找出依赖项。然而,它只使用了一个真正幼稚的解析器,所以像您描述的那样的东西不会被接受。您可以使用bindTo显式指定依赖项:


谢谢你的回答。我已经更新了我的问题以澄清我的问题。由于完全相同的原因,它没有得到处理。解析器希望得到'some.vm.prop';。因为您包含了一个变量,所以它无法解析它。
viewModel: {
    formulas: {
        isPressed: function (get) {
            return get(this.getView().getTarget());
        }
    }
}
const viewModel = new Ext.app.ViewModel({
    formulas: {
        isNameModified: {
            bind: {
                bindTo: '{theUser}',
                deep: true
            },
            get: user => user.foo
        }
    },
    data: {
        theUser: {
            foo: 1
        }
    }
});