これがバックボーンビューの私のシナリオです
var TreeNode = Backbone.View.extend({
tagName : "span",
className : "ndelem dirnode",
events : {
"click" : "selectNode",
},
initialize : function() {
_.bindAll(this, "render", "selectNode");
$(this.el).append(this.model.get("fname")).attr({
"data-cid" : this.model.cid
});
},
render : function() {
this.delegateEvents();
return this;
},
selectNode : function(e) {
e.stopPropagation();
this.model.set({
isOpened : true
});
}
});
メインビュー
var TreeZone = Backbone.View.extend({
el : $("#nodes"),
initialize : function() {
this.collection.bind("add", this.list, this);
},
getHtml : function(elem) {
var newItem = $("<div/>").append(elem);
return newItem.html();
newItem.remove();
},
getSelectedItem : function() {
var selectedItem = $('#nodes').jqxTree('selectedItem');
if (selectedItem != null)
return selectedItem.element;
else {
var treeItems = $('#nodes').jqxTree('getItems');
var firstItem = treeItems[0];
return firstItem.element;
}
},
list : function(file) {
var node = new TreeNode({
model : file
});
var newItem = this.getHtml(node.render().el);
var element = this.getSelectedItem();
$('#nodes').jqxTree('addTo', {
html : newItem,
}, element);
$('#nodes').jqxTree('expandItem', element);
}
});
var tree = new TreeZone({collection:dircollection});
コレクションに要素を追加します。
しかし、ツリーノードのクリックイベントは発生しません。ツリーはjqueryオブジェクトをサポートしていないため、単純に生のhtmlをツリーノードに追加しています。get html 関数から html を取得しようとしています。そしてそれをツリーに与えます。