【发布时间】:2015-05-23 00:21:40
【问题描述】:
我正在尝试创建一个使用 Knockout JS 作为项目视图模型的 JSTree 接口。
我希望能够通过自定义绑定中发生 JSTree“构建”的视图模型创建/重命名/删除节点。我很难弄清楚如何在我的视图模型中访问 jstree(同时保持 ui 解耦),以便我可以 CRUD 节点。
我显然不想将新对象推送到数组中,但这样做是为了证明 observableArray([]) 可用于数据。
http://jsfiddle.net/ascendantofrain/76cco3cs/41/
HTML
<div class="wrapper">
<div class="button-wrapper">
<button type="button" class="btn btn-success btn-sm" data-bind="click: $root.createFolder">Create Folder</button>
<button type="button" class="btn btn-success btn-sm" data-bind="click: $root.createFile">Create File</button>
<button type="button" class="btn btn-warning btn-sm" data-bind="click: $root.rename">Rename</button>
<button type="button" class="btn btn-danger btn-sm" data-bind="click: $root.delete">Delete</button>
</div>
<pre data-bind="text: treeData"></pre>
<div id="jstree_demo_div" data-bind="jstree: { data: treeData }"></div>
<!-- <div id="jstree_demo_dev_attributes">
<ul>
<li>Attribute Reporting Group
<ul>
<li>Invoice Dates</li>
</ul>
</li>
</ul>
</div> -->
</div>
淘汰赛 JS
function tree() {
var self = this;
self.createFolder = function (data) {
self.treeData.push({
'id': 'iPhone',
'parent': 'device',
'text': 'iPhone',
'type': 'default'
});
};
self.createFile = function (data) {
self.treeData.push({
'id': 'ios8',
'parent': 'iPhone',
'text': 'iOS 8',
'type': 'file'
});
};
self.rename = function (data) {
};
self.delete = function (data) {
};
self.treeData = ko.observableArray([
{ 'id': 'animal', 'parent': '#', 'text': 'Animals' },
{ 'id': 'device', 'parent': '#', 'text': 'Devices' },
{ 'id': 'dog', 'parent': 'animal', 'text': 'Dogs' }
]);
};
ko.bindingHandlers.jstree = {
buildTree: function (element, treeData) {
$(element).jstree('destroy');
$(element).jstree({
'core': {
'animation': 0,
'check_callback': true,
'data': treeData
},
'types': {
'#': {
'max_depth': 4,
'valid_children': ['root']
},
'level_1': {
'valid_children': ['default']
},
'level_2': {
'valid_children': ['file']
},
'file': {
'icon': 'glyphicon glyphicon-file'
}
},
'plugins': [
'search',
'state',
'types',
'wholerow',
'unique'
]
});
},
update: function (element, valueAccessor) {
var treeData = ko.unwrap(valueAccessor());
ko.bindingHandlers.jstree.buildTree(element, treeData.data());
}
};
ko.applyBindings(new tree());
【问题讨论】:
标签: javascript jquery mvvm knockout.js jstree