javascript - 如何将函数传递给主干子视图
问题描述
用户选择视图是许多不同视图的共享子视图。问题是当用户被点击时,每个父视图都需要发生不同的事件。例如:
- 如果任务视图是父级,则单击用户搜索结果会将该用户分配给任务
- 如果项目视图是父级,单击用户搜索结果将使该用户成为项目的所有者
有没有办法将处理程序传递给子视图?下面的代码传递了处理程序,但它在子视图初始化时立即执行。
ProjectManager.Views.BoardTask = Backbone.View.extend({
...
toggleSelectUser: function () {
let self = this;
let userSelectionView = new ProjectManager.Views.UserSelection({
collection: self.collection,
attributes: {
onResultClick: self.updateUser
}
});
$(".main-container").append(userSelectionView.render().$el);
userSelectionView.position(self.$(".board-task-user-picture"));
},
updateUser: function (user) {
// Update the assigned user of the board task
},
...
});
解决方案
将函数绑定到父视图,然后在选项中将其传递给子视图似乎可以解决这个问题。
let self = this;
let userSelectionView = new ProjectManager.Views.UserSelection({
collection: self.collection,
onResultClick: self.updateUser.bind(self)
});
推荐阅读
- swift4 - 如何使用 ARKit 更准确地测量距离?
- php - 使用 JSON 的数据库连接
- scala - 如何更新数组列?
- android - 如何在单击按钮时使用 Glide 将图像保存到存储中?
- java - Java Servlet:强制初始化在 Payara 服务器启动时创建数据对象?
- apache-spark - Cassandra/Spark 读取性能
- php - 如何使用子字符串检查 $_POST
- javascript - 如何在将文本附加到 div 时将 onclick 中的文本引用为 onclick=" '+var+' "
- maven - javax.validation.BootstrapConfiguration.getClockProviderClassName()Ljava/lang/String 没有这个方法
- java - 在 Activity 中仅使用 1 个 AdView 或在片段中使用多个