- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 BackboneJS 框架,但遇到了一种情况,我必须不断地将函数包装到 _.bind()
中,以将 this
保持在正确的范围内。
一个例子是简单的 AJAX 调用。默认情况下,JQuery 将 this
更改为 AJAX 请求对象,但我想将 View 保留为 this
:
var AwesomeView = BackboneView.extend({
firstFunction : function() {
$.getJSON(
"/test",
{},
_.bind(function(aData) {
this.secondFunction(aData);
}, this)
)
} ,
secondFunction : function(aData) {
console.log(aData)
}
});
我的代码库中有很多发生这种情况的示例,并且它有效,但似乎被黑客攻击了。
所以我的问题是,有没有更优雅的方法来解决这个问题?
最佳答案
有两种方法可以避免使用 _.bind
以及其他更优雅的使用方法。
我喜欢在代码中使用 _.bind
和 _.bindAll
。但我发现这个实现更优雅一些。
var AwesomeView = BackboneView.extend({
initialize: function() {
_.bindAll(this, 'func1', 'func2');
BackboneView.prototype.initialize.apply(this, arguments);
},
...
});
在这里,您将 View 函数 func1
和 func2
绑定(bind)到 View 的上下文。您可以使用您的示例从任何上下文“正常”简单地调用它们:
func1 : function() {
$.getJSON("/test",{}, this.func2);
},
...
请注意,Function.prototype.bind
在 ECMA 脚本 5.1 中可用。
您还可以使用call
,但它现在看起来与您的代码类似。
firstFunction : function() {
var _this = this;
$.getJSON(
"/test",
{},
function(aData) {
_this.secondFunction.call(_this, aData);
});
)
}
关于javascript - BackboneJS : Avoid calling _. 绑定(bind)(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29613743/
我正在使用 Backbonejs 和 Requirejs 创建单页 Web 应用程序。我的应用程序似乎存在内存泄漏。 为了测试,我创建了一个示例代码。它创建一个 View 对象,调用其 render
我从加载对话框的位置有一个详细信息 View 。 此对话框有一个表单,用户可以在其中输入一些值(对应于我的模型属性) 我从详细信息 View 传递模型并在同一模型中设置值(在表单字段的更改操作上) 现
我正在尝试添加 Jquery Jplayer http://jplayer.org到我的 Backbone 应用程序,但无法运行它。我将脚本设置到 RequireJS 配置文件中,控制台告诉我脚本已加
Click here for the js fiddle example 此模板应该在集合中呈现新消息,我正在尝试遵循 this tuorial使用我自己的版本来呈现消息
由于某种原因,我在保存模型时无法输入 success 和 error block 。无论我的响应是成功“201”还是错误“404”,我的代码都不会命中 debugger 行。有谁知道可能出了什么问题吗
我有一个BackboneJS应用程序,可在 View 上显示Youtube视频。因此,当用户单击缩略图时,Youtube-iframe将打开并播放视频。当用户关闭它并想再次播放时,什么也没有发生。为了
我刚刚开始学习 BackboneJS,我正在编写一个小示例文档来测试它的工作方式。但我很难理解它,目前它根本没有任何意义:) 所以,我有下一个文件结构: /* application.js */ va
在我的 Backbone.js 应用程序中,我有一个路由结构,其中包含一些我只想在一个处理程序中处理的公共(public)部分。例如,这些 URL /#scenario/1/show-report /
我刚刚开始学习backbonejs。这是我的一些演示代码行: var i = 0; Player = Backbone.Model.extend({
我有一个 Backbone 应用程序,使用 HandlebarsJS 作为我的 HTML 模板。现在我有一个按钮可以触发登录弹出框。我的问题是,我必须双击按钮/链接,直到弹出窗口打开。这是为什么??我
我是 Backbonejs 的新手,试图理解这里的模型。我定义了一个这样的模型 var Employee=Backbone.Model.extend({ initialize: functi
在 BackboneJS 的 router.js 中使用 this.initialize(); 和 有什么区别 require(['router'],function(Router) { ro
我正在使用 Rails 3.1 mongodb 和 backbonejs 构建小型单页应用程序。 我有两个可通过 json api 获得的资源。我在 backbone 中创建了两个模型和集合,看起来像
我可以在哪里进行一些计算,例如计算员工工资?是否需要使用外部文件,或者我可以使用模型、集合或 View ? 最佳答案 模型的属性表示数据实体(员工)的状态。它的方法应该改变数据实体的状态。所以模型的方
我在表单和表单数据中有一个上传图像。表单数据存储在模型中 如何将表单数据与文件数据结合并保存模型 我正在设置模型属性以及如何在属性中包含文件数据。我找到了这个链接 Forcing Backbone t
我将 Tastypie 用于我的 RESTful api,将 Backbonejs 用于前端。模型的 fetch 工作正常,但是,对于 Backbone.Collection 我似乎得到了错误的回应:
我有一个代表产品的模型(在 UL 中显示为 LI 项目)和一个包含这些产品的集合。 当我单击一个 LI 时,我希望基础模型的属性设置为 true,而集合中的所有其他模型的属性设置为 false。 //
我想在我的页面顶部创建一个固定位置的导航菜单,它应该在我点击相关链接后显示不同的 View 。我有一个 index.php 文件、一个 mainpage.js 文件和用于集合、模型、 View 、路由
您好,我是 Backbone 的新手,我只是稍微尝试了一下,这是我的代码: var Users = Backbone.Collection.extend ({ url : 'h
我的应用程序的索引页面位于http://cms/admin(我在本地主机上)。索引页上只有一个 a 元素: deneme 当我点击链接时,它会转到/cms/admin/test 我想使用 Backbo
我是一名优秀的程序员,十分优秀!