父视图到子视图的事件绑定关系
Parent to child view event binding relationships
我想知道在父子关系中应该在哪里设置事件。这不是一个具体的问题,我想这只是一个最佳实践。我的具体案例:
我有一个包含Button
和List
的Dropdown
。在描述动作时,按下按钮,列表就会出现。单击列表中的某个项目,该项目将被选中,列表将消失。
因此,第一件事是,由于视图被初始化为Dropdown
,因此创建它的人不需要访问并处理Button
或List
视图。所有方法都应该在父视图上调用,并且可能需要从子视图中弹出事件。
例如,Dropdown
不执行:this.dropdown.button.press();
,而是提供了自己的press
方法,该方法只调用Button
的press方法。
当用户按下按钮时,Button
触发Dropdown
正在收听的press
事件。
onButtonPress : function () {
if (!this.isExpanded()) {
this.expand();
}
this.trigger('press');
},
Dropdown
会触发按压本身,这样开发人员就可以在不接触dropdown.button
的情况下获得按压事件。
这是第一个问题。Dropdown
应该在onButtonPress
中展开自己,还是onButtonPress
只是触发按压,然后让展开侦听Dropdown
自己的press
事件:
onButtonPress : function () {
this.trigger('press');
},
onPress : function () {
if (!this.isExpanded()) {
this.expand();
}
},
然后它变得更加复杂,如果Dropdown
的expand
方法只触发expand
本身:
expand : function () {
if (this.isEnabled()) {
this.setState('expanded', true);
this.trigger('expand');
}
return this;
},
onExpand : function () {
this.list.show();
},
还是应该是show
是List
:
expand : function () {
if (this.isEnabled()) {
this.setState('expanded', true);
this.list.show();
this.trigger('expand');
}
return this;
},
我想我只是想知道在父母/孩子关系中决定在哪里绑定事件的最佳实践。如何避免混乱的情况和可能的循环事件调用。
有人有什么想法吗?
我只需要使用DOM,而不是手动触发事件。如果希望事件首先命中父级,则将捕获设置为true,如果希望事件冒泡,则将捕捉设置为false。
这允许在捕获阶段调用事件处理程序,因此父DOM元素首先获得事件:
el.bind('someevent', somefunction, true);
这个气泡,因此子级首先接收事件,并且在子级接收事件时调用处理程序。
el.bind('someevent', somefunction, false);
一般来说,保持简单。您还可以使用委托编程模式,在该模式中,父级将为自己和子级获取事件,这样您就可以避免混淆,并可能在较大的应用程序中节省内存。
- 有没有比在app.js上绑定模块名称更好的方法来动态加载视图模型和视图以显示模态
- 取消绑定主干视图事件
- Backbone.js将模型绑定到视图时出错
- 使用knockout.js将数组绑定到视图模型
- 如何在angularjs中检查Kendo树视图数据绑定事件
- Ember.js/HHandlebars:使用{{view}}助手渲染的视图不绑定属性
- Angular $scope更新、导航和 $scope.$apply() 后不绑定到视图
- 在 AngularJS 中将数据从视图绑定到控制器
- Emberjs - 将参数动态绑定到视图
- 挖空、视图模型位于其他对象和数据绑定中
- 如何将经度/经度值绑定到挖空视图模型方法
- 主干.js绑定到集合“添加”呈现视图两次
- 对视图上函数的角度绑定导致对数据服务的无限调用
- 复合视图绑定到的初始事件
- 所见即所得视图绑定到 Ace 编辑器
- 自定义 ngModel 指令以支持 jquery 插件中的模型>视图绑定
- 视图绑定未定义
- Ember.js:视图绑定不起作用
- Angular JS数据没有从视图绑定到模型
- Backbone.js中视图绑定的事件顺序是什么