我在Ext JS 5.1.0.107中有一個按鈕和一個treepanel。公式確定按鈕是否被禁用,並且該公式被綁定到樹形控制面板的選擇。更新記錄的數據更改時綁定到公式的ExtJS按鈕
僅當選定節點是分支並且node.get(「ID」)具有值時才應啓用該按鈕。
下面的代碼在我選擇樹中的一個節點時工作。
我的樹&按鈕:
{
xtype: 'treepanel',
bind: {
selection: '{selectedNode}'
},
...
}, {
xtype: 'button',
bind: {
disabled: '{isButtonDisabled}'
},
...
}
我的視圖模型:
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
一個字段設置後立即停用?
編輯:
請https://fiddle.sencha.com/#fiddle/m8q看看,並期待在應用程序運行時,控制檯日誌。
在MyViewport.js,我做了以下內容:
- 1秒樹的一個AfterRender事件之後,它會創建一個新的分支 節點&選擇它。 (按鈕被禁用正確)
- 之後1秒,它設置新節點的ID。
- 1秒後,它測試按鈕是否仍然被禁用(不正確)。
只有選定的節點不是樹葉並具有ID才能啓用該按鈕。因此,只有「家庭作業」節點纔會啓用該按鈕。
如果您選擇不同的節點,然後單擊「新節點」,該按鈕將被正確啓用。它只是不會自動啓用。
是,這樣做讓我以下錯誤:'無效れ引用或現有れ的ID:null'。我已經添加了一個[sencha小提琴示例](https://fiddle.sencha.com/#fiddle/m8q)以更好地說明問題。 –
這不起作用,因爲我正在設置並獲取名爲「ID」的屬性,而不是「id」。我在看'newNode.data.ID'。 –