Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.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
Javascript 记录时更新绑定到公式的ExtJS按钮';s数据更改_Javascript_Extjs_Extjs5 - Fatal编程技术网

Javascript 记录时更新绑定到公式的ExtJS按钮';s数据更改

Javascript 记录时更新绑定到公式的ExtJS按钮';s数据更改,javascript,extjs,extjs5,Javascript,Extjs,Extjs5,我在ExtJS5.1.0.107中有一个按钮和一个树面板。公式确定按钮是否已禁用,并且该公式已绑定到树面板的选择 仅当所选节点是分支且node.get(“ID”)具有值时,才应启用该按钮 当我在树中选择一个节点时,下面的代码起作用 我的树和按钮: { xtype: 'treepanel', bind: { selection: '{selectedNode}' }, ... }, { xtype: 'button', bin

我在ExtJS5.1.0.107中有一个按钮和一个树面板。公式确定按钮是否已禁用,并且该公式已绑定到树面板的选择

仅当所选节点是分支且node.get(“ID”)具有值时,才应启用该按钮

当我在树中选择一个节点时,下面的代码起作用

我的树和按钮:

{
    xtype: 'treepanel',
    bind: {
        selection: '{selectedNode}'
    },
    ...
}, {    
    xtype: 'button',
    bind: {
        disabled: '{isButtonDisabled}'
    },
    ...
}
我的ViewModel:

Ext.define('App.view.MyViewModel', {    
    extend: 'Ext.app.ViewModel',
    alias: 'viewmodel.myviewmodel',
    requires: ['Ext.app.bind.Formula'],
    data: {selectedNode: false},

    formulas: {
        // returns `true` if node is a leaf or node.data.ID has no value
        isButtonDisabled: {
            get: function(data) {
                var isDisabled = true;
                data = data || {};

                if (data.isModel) {
                    isDisabled = Ext.isEmpty(data.get('ID')) || data.isLeaf();
                }

                return isDisabled;
            },
            bind: '{selectedNode}'
        }
    }
});
我的问题发生在以下过程中:

  • 我以编程方式向树中添加一个新的树分支节点,然后选择 信息技术
    newBranchNode.data.ID
    未定义,因此按钮正确 残疾人

  • 当我调用
    newBranchNode.set('ID',myNewValue)
    时,它会用一个值更新
    newBranchNode.data.ID
    ,因此
    isButtonDisabled
    公式将返回
    false
    ,这意味着应该启用该按钮;但是,该按钮保持禁用状态

如何让按钮在设置
newBranchNode
上的字段后立即重新评估是否应禁用该按钮


编辑:

请在应用程序运行时查看控制台日志

在MyViewport.js中,我执行以下操作:

  • 树的afterrender事件发生1秒后,它将创建一个新分支 节点&选择它。(按钮已正确禁用)
  • 1秒钟后,它设置新节点的ID
  • 1秒钟后,它会测试按钮是否仍处于禁用状态(不正确)
只有非叶子且具有ID的选定节点才会启用该按钮。因此,只有“作业”节点才会启用该按钮


如果选择其他节点,然后单击“新建节点”,则按钮将正确启用。它不会自动启用。

请尝试如下设置公式:

canNotAddNode: {
    get: function(getter) {
        var selectedNode = getter('selectedNode'),
            id = getter('selectedNode.ID');

        return !id || selectedNode.isLeaf();
    }
}

工作示例:

是,这样做会导致以下错误:
无效的domNode引用或现有domNode的id:null
。为了更好地说明这个问题,我添加了一个。这不起作用,因为我正在设置和获取一个名为“ID”而不是“ID”的属性。我正在查看
newNode.data.ID
。这将不起作用,因为它没有针对所有必需的条件进行测试。1.)节点是一个分支(不是叶节点)2.)节点。get(“ID”)有一个完美的值!谢谢在阅读了您的代码和其中的“数据依赖项”部分后,我理解只要getter()中指定为参数的内容发生更改,就会调用这个公式。如果我有
getter('selectedNode')
getter('selectedNode.ID')
,和
getter('foo')
,那么在对
selectedNode.get(“ID”)
进行更改以及对直接位于
selectedNode
foo
下的属性进行任何更改后,它会自动重新计算此公式。