gpt4 book ai didi

Backbone.js 嵌套 View : reference or events?

转载 作者:行者123 更新时间:2023-12-04 18:23:50 25 4
gpt4 key购买 nike

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

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');
}
});

最佳答案

可能单个方法调用将比事件调度更有效,事件调度将涉及至少 2 个方法调用。但我认为你不需要关心技术上哪个更“有效”。除非这种情况在一秒钟内发生多次,否则您可以只关心如何使代码更清晰、更正确。我认为最简洁的模式取决于所传达的细节。这是我的偏好:

  • 如果外部 View 自然适合操作模型和集合,并通过正常的主干模型/集合事件让内部 View 响应,那是最干净的。
  • 如果发生的事情与模型无关,请考虑一种“ View 模型”模式,在该模式中,您可以将 View 的有趣状态位建模为后端模型,即使您无意让该模型交互与服务器。然后将你的两个 View 绑定(bind)到来自 View 模型的事件,并通过改变一个通用的“ View 模型”实例来让它们协调。这是我用于复杂 View 的模式,这些 View 具有许多与服务器的底层模型没有直接关联的相互依赖的状态。
  • 如果发生的事情并没有真正改变模型/集合并且更多的是特定于 View 的事情,那么直接方法分派(dispatch)将更直接但也更紧密耦合。由事件分派(dispatch)提供的松散耦合何时值得额外的复杂性和更难遵循的控制流取决于您的判断。
  • 关于Backbone.js 嵌套 View : reference or events?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10146178/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com