次のコードを使用して、アプリケーションでJSTreeを使用しています。
this.CreateTreeView = function () {
$('#jstree_demo_div').jstree({
'core': {
'multiple': false,
'data': [
{ "id": "ajson1", "parent": "#", "text": "Simple root node" },
{ "id": "ajson2", "parent": "#", "text": "Root node 2" },
{ "id": "ajson3", "parent": "ajson2", "text": "Child 1" },
{ "id": "ajson4", "parent": "ajson2", "text": "Child 2" },
]
}
});
}
私のコードに示されているように、私は複数選択を無効にしようとしています。
次のコードを使用してノードを選択すると、.
$("#jstree_demo_div").jstree().select_node("ajson3");
$("#jstree_demo_div").jstree().select_node("ajson4");
それでも、両方のノードを選択します。つまり、Javascriptからの複数選択のようになります。
この質問は、JSTreeが正しく機能していることを確認するためだけに行っていますか?
deselect_all
関数を使用してノードを選択する前に、すべてのノードの選択を解除できることを知っています。
しかし、私によれば、複数選択がfalseに設定されている場合、javascriptからノードを選択すると、1つのノードのみが選択されます。
私が間違っている場合は私を訂正してください。
select_node
は、multiple
の設定に関係なくノードを選択します。
この設定はユーザーの操作のみを制限します。select_node
は低レベルのメソッドであり、制限されないため、ユーザー(開発者)は制限なしにプログラムで選択を変更できます。
ユーザーの操作によってトリガーされる(したがってmultiple
によって制限される)同じ関数を使用する場合は、activate_node
を使用します。
この構成を使用するだけです
this.CreateTreeView = function () {
**"plugins" : [
"checkbox",
],**
$('#jstree_demo_div').jstree({
'core': {
**'multiple': false,**
'data': [
{ "id": "ajson1", "parent": "#", "text": "Simple root node" },
{ "id": "ajson2", "parent": "#", "text": "Root node 2" },
{ "id": "ajson3", "parent": "ajson2", "text": "Child 1" },
{ "id": "ajson4", "parent": "ajson2", "text": "Child 2" },
]
},
**'checkbox' : {
'deselect_all': true,
'three_state' : false,
}**
}); }
'checkbox' : {
'deselect_all': true,
'three_state' : false,
}
正常に動作します!
JStreeでチェックボックスの複数選択を無効にするには、このコードも完全に機能します。
var tmp=null; /// to prevent recursion
treeobj.on("check_node.jstree uncheck_node.jstree", function(e, data) {
if(tmp!=data.node.id){
tmp=data.node.id;
treeobj.jstree("uncheck_all", null);
treeobj.jstree("check_node",data.node.id);
}
})