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
Backbone.js嵌套视图:引用还是事件?_Backbone.js - Fatal编程技术网

Backbone.js嵌套视图:引用还是事件?

Backbone.js嵌套视图:引用还是事件?,backbone.js,Backbone.js,更有效的方法是,使用事件在嵌套视图之间通信,或者保留引用以调用方法。下面的示例显示了两个视图。外部视图响应单击事件,然后可以使用事件或方法调用来使内部视图做出适当的响应 InnerView = Backbone.View.extend({ initialize: function() { this.model.bind('doSomethingEvent', this.doSomething); }, doSomething: function() {

更有效的方法是,使用事件在嵌套视图之间通信,或者保留引用以调用方法。下面的示例显示了两个视图。外部视图响应单击事件,然后可以使用事件或方法调用来使内部视图做出适当的响应

InnerView = Backbone.View.extend({

    initialize: function() {
        this.model.bind('doSomethingEvent', this.doSomething);
    },

    doSomething: function() {
        // This could have been called from event/trigger
        // or from direction method invocation using reference.
    }
});


OuterView = Backbone.View.extend({

    events = {
        'click' : 'handleOutViewClick'
    },

    render: function() {

        // Create InnerView to render some model
        var innerView = new InnerView({model:this.model });

        $(this.el).append(innerView.render().el);

        // Could store a reference to the View?
        this.viewRef = innerView;
    },

    handleOutViewClick: function(e) {

        // Should this function use a reference to the InnerView instance:
        this.viewRef.doSomething();

        // Or should it trigger an event on this.model that 
        // the InnerView is bound to?
        this.someCollection.trigger('doSomethingEvent');
    }
});

一个方法调用可能比事件分派更有效,事件分派至少涉及两个方法调用。但我不认为你需要关心技术上哪个更“有效”。除非这种情况在一秒钟内发生多次,否则您只能关心哪些代码更干净、更正确。我认为最干净的模式取决于沟通的细节。以下是我的偏好:

  • 如果outerview自然适合处理模型和集合,并且让innerview通过正常主干模型/集合事件进行响应,那么这是最干净的

  • >P>如果发生的不是真正的模型,那么考虑一个“视图模型”模式,在这个模型中,你将视图的有趣状态模型当作是一个后端模型,即使你无意让该模型与服务器交互。然后将两个视图绑定到视图模型中的事件,并通过更改一个公共“视图模型”实例使它们协调。这是我用于复杂视图的模式,这些视图具有许多相互依赖的状态,与服务器的底层模型没有直接关联

  • 如果所发生的事情并没有真正改变模型/集合,并且更像是视图特定的事情,那么直接方法调度将更直接,但也更紧密地耦合。事件调度提供的松散耦合何时值得额外的复杂性和更难遵循的控制流,这取决于您的判断


  • 一个方法调用可能比事件分派更有效,事件分派至少涉及两个方法调用。但我不认为你需要关心技术上哪个更“有效”。除非这种情况在一秒钟内发生多次,否则您只能关心哪些代码更干净、更正确。我认为最干净的模式取决于沟通的细节。以下是我的偏好:

  • 如果outerview自然适合处理模型和集合,并且让innerview通过正常主干模型/集合事件进行响应,那么这是最干净的

  • >P>如果发生的不是真正的模型,那么考虑一个“视图模型”模式,在这个模型中,你将视图的有趣状态模型当作是一个后端模型,即使你无意让该模型与服务器交互。然后将两个视图绑定到视图模型中的事件,并通过更改一个公共“视图模型”实例使它们协调。这是我用于复杂视图的模式,这些视图具有许多相互依赖的状态,与服务器的底层模型没有直接关联

  • 如果所发生的事情并没有真正改变模型/集合,并且更像是视图特定的事情,那么直接方法调度将更直接,但也更紧密地耦合。事件调度提供的松散耦合何时值得额外的复杂性和更难遵循的控制流,这取决于您的判断