Javascript 主干和MVC-事件冒泡
我正在尝试使用主干和其他lib创建一个树可视化小部件 这符合MVC模式 我有一个节点模型和一个树集合:Javascript 主干和MVC-事件冒泡,javascript,backbone.js,model-view-controller,architecture,event-handling,Javascript,Backbone.js,Model View Controller,Architecture,Event Handling,我正在尝试使用主干和其他lib创建一个树可视化小部件 这符合MVC模式 我有一个节点模型和一个树集合: var Node = Backbone.Model.extend({ defaults: { name : 'NewNode', _id : null, parent_id: null, type : '' }, idAttribute: '_id' }); var Tree = Backbone.Col
var Node = Backbone.Model.extend({
defaults: {
name : 'NewNode',
_id : null,
parent_id: null,
type : ''
},
idAttribute: '_id'
});
var Tree = Backbone.Collection.extend({
model: Node
});
我对每个问题都有自己的看法:
NodeView-呈现特定节点的HTML
TreeView—检查集合中的每个节点并将它们附加到a div容器中
var TreeView = Backbone.View.extend({
...
render: function () {
this.collection.forEach(this.addNewNode, this);
return this;
},
addNewNode: function(nodeModel){
var nodeView = new NodeView();
nodeView.render();
this.$el.find('.gnodes').append(nodeView.el);
return this;
},
...
我还有一个模块作为我的控制器,而不是主干网的路由器\控制器
在那里,我用一个树集合实例化了一个树视图
var config = _.extend({}, defaults, options);
var tree = new Tree();
config.collection = tree;
var treeView = new TreeView(config);
“我的视图”事件之一是单击节点以编辑其信息-
因为它是一个发生在节点上的事件,所以我觉得将它放在NodeView上是有意义的
var nodeView = SVGView.extend({
...
events: {
'click [data-action="editTitle"]': 'editNodeName'
},
但现在我有个问题-
如何将此事件冒泡到控制器,使其能够对其作出反应
我的控制器没有节点视图的实例-树视图就是这个地方
创建节点视图以进行渲染
我是否应该在树视图中显示事件
或者我应该在控制器中实例化NodeView
注意:我试图简化事情,因此没有透露所有视图和控制器代码。当我谈到控制器时,我指的是MVC控制器,一个负责模型和视图之间所有逻辑的模块。我不是指主干网的控制器\路由器对象。如果您试图将配置传递给nodeView并跟踪任何收集事件,为什么不呢。或者将配置集合的每个模型传递给nodeView?配置与问题无关-这是用户在创建控件或控制器实例时传递的内容。我不想使用主干网的路由器,因为我觉得这不是我需要的,我不需要处理视图之间的导航。但似乎您将配置视为控制器,因为您将集合分配给iti,我将对象传递给TreeView,它包括不同的参数,如集合。将其视为var treeView=newtreeview{collection:tree};相反