Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干和MVC-事件冒泡_Javascript_Backbone.js_Model View Controller_Architecture_Event Handling - Fatal编程技术网

Javascript 主干和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

我正在尝试使用主干和其他lib创建一个树可视化小部件 这符合MVC模式

我有一个节点模型和一个树集合:

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};相反