- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
当然,我阅读了手册,但正如我在经典示例中看到的那样,如果我用绑定(bind)注释该行,它并没有真正的区别。这些方法现在默认绑定(bind)了吗?
(function($){
var ListView = Backbone.View.extend({
el: $('#TheList'), // el attaches to existing element
events: {
'click button#add': 'addItem'
},
initialize: function(){
// _.bindAll(thathis, 'render', 'addItem'); // every function that uses 'this' as the current object should be in here
this.counter = 0; // total number of items added thus far
this.render();
},
render: function(){
$(this.el).append('<button id="add">Add list item</button>');
$(this.el).append('<ul></ul>');
// console.log(this);
// console.log(this.el);
},
addItem: function(){
this.counter++;
$('ul', this.el).append('<li>hello world'+this.counter+'</li>');
}
});
var listView = new ListView();
})(jQuery);
最佳答案
Jax 是正确的,您不必在最新版本的 Backbone(当前为 1.1.0)中手动绑定(bind)您的 View 方法和事件。早期的版本也是如此,但我不记得是哪一个了。
在某些情况下,您需要绑定(bind) View 方法以使其正常工作。这些情况是基本的 Javascript 范围,与 Backbone JS 无关。
最好不要使用_.bindAll
。相反,如果您使用的是 Underscore JS,您应该根据具体情况使用 _.bind
进行绑定(bind)。
实际上,如果您使用的是 Backbone,则也不需要使用 _.bind
。 Backbone Events
类上有快捷方法。这意味着您也可以在 Collection
和 Model
类中使用这些快捷方式,因为它们本质上都混合了 Events 类。
这是您需要在 View 类中执行的操作,以将监听器附加到集合或模型。
this.collection.on('add', this.appendItem, this);
或
this.model.on('change', this.render, this);
第三个参数将 View 对象范围绑定(bind)到render
方法。如果没有这个,render
方法将在我认为的模型范围内被调用。
在旁注中,您也可以这样做:
this.collection.bind('add', this.appendItem, this);
on
方法其实是bind
的别名,不过我觉得用on
更清晰。使用 bind
可能会造成混淆。看起来 Backbone 文档更喜欢 on
和 off
而不是 bind
和 unbind
。
这里有两个 jsFiddle 可以说明我在说什么。我的示例是从本教程示例修改而来的:http://arturadib.com/hello-backbonejs/docs/5.html
本教程实际上已经存在了很长时间,因此可能不是最好的使用方法。它看起来确实可能已经更新了一点,因为它确实使用了 Backbone 1.10。我还会注意到它使用 _.bindAll
。
版本 1 正确使用绑定(bind):http://jsfiddle.net/ChTjs/
相关方法在这里:
initialize: function() {
this.collection = new List();
this.collection.on('add', this.appendItem, this);
this.collection.on('add', this.updateCount, this);
this.collection.on('remove', this.updateCount, this);
this.counter = 0;
this.render();
},
这里:
this.model.on('change', this.render, this);
this.model.on('remove', this.unrender, this);
这是一个没有将 View 范围绑定(bind)到回调的 jsFiddle 版本。 http://jsfiddle.net/LpEW8/1/
尝试一下并慢慢添加绑定(bind)以使代码再次运行。我刚刚意识到 Backbone 文档中实际上提到了这一点。搜索绑定(bind)“this”
编辑 2
刚刚意识到使用listenTo
方法会更好。此处的优点是您的回调将始终绑定(bind)到调用 listenTo
的 View /对象。所以不需要像使用 on
时那样传递 this
。额外的好处是监听器将自动删除,而使用 on
所以不是这个:
this.collection.on('add', this.appendItem, this);
this.collection.on('add', this.updateCount, this);
this.collection.on('remove', this.updateCount, this);
你在你的 View 中这样做:
this.listenTo(this.collection, 'add', this.appendItem);
this.listenTo(this.collection, 'add', this.updateCount);
this.listenTo(this.collection, 'remove', this.updateCount);
这是 Backbone 文档中 listenTo
的 anchor 链接:http://backbonejs.org/#Events-listenTo
这里还有一个更新的 fiddle :http://jsfiddle.net/ChTjs/2/
关于javascript - `bindAll` 过时了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21568472/
我是非洲的一名学生,在我们的土地上,确实存在缓慢且昂贵的互联网连接,这就是为什么每当我们听到安装软件的“在线存储库”方法这个词时都会害怕得发抖。该死的,这通常意味着你必须去别处看看。 问题。(如果没有
我正在使用 OpenCV 1 进行一些图像处理,并且对 cvSetErrMode 函数(它是 CxCore 的一部分)感到困惑。 OpenCV 具有三种错误模式。 叶:调用错误处理程序后程序终止。 父
安装新版 IDEA.14 后,(maven)项目的部署显着增加(从 15 秒增加到 47 秒)。 最佳答案 原因: IDEA 使用 捆绑 Maven的版本 解决方案:设置 (ctrl+alt+S) -
在 .NET 中,您可以将某些方法标记为过时,以便开发人员在尝试使用已弃用的方法时收到警报。 Private Sub FormerMethod() 问题是您只能在您控制的类中执行此操作。当您希望开发
一段时间以来,我一直在尝试自己解决这个问题,但一直没有成功。当我大约有 10% 的时间重新部署我的 Rails 应用程序时,就会发生这种情况。其他 90% 的时间部署顺利进行。 我试了又试,还是没成功
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在学习 HTTP/2 协议(protocol)。它是一个带有小消息帧的二进制协议(protocol)。它允许在单个 TCP 连接上进行流复用。从概念上讲,它似乎与 WebSockets 非常相似。
在 Matlabs 的最新版本中,specgram 函数被 spectrogram 取代,文档说明: Note. To obtain the same results for the removed
我们试图在构建时标记外部类型(如 ConfigurationManager)的使用。 自定义代码分析字典可以提供帮助 [1],但仅限于项目中包含源代码的情况。同样,Obsolete 属性适用于项目中包
我将 Anaconda 与 Python 3 结合使用,并尝试安装 cc 包,这是 uber h3 包的要求。 尝试通过以下方式在 anaconda 命令行中安装时: pip install cc 我
我在 Razor 中创建了一个专门用于显示货币的显示模板,现在我想在我的代码中删除它并替换为接受字符串格式(我可以将其设置为“C”)的标准文本显示模板。 然而,出现了很多次,所以我想使用类似 [Obs
我希望我的网站具有如下所示的 URL: example.com/2010/02/my-first-post 我有我的 Post带 slug 的模型字段('我的第一篇文章')和 published_on
4.7 并喜欢在 qgraphicsview 上叠加两个图像。顶部的图像应是半透明的,以便能够透过它看到。最初,两个图像都是完全不透明的。我期望存在一些为每个像素设置全局 alpha 值的函数,但似乎
总结: 我在我的 Swift 代码中犯了一个错误,我已经修复了它。然后我问自己为什么会这样,我该如何避免。我尝试了一些方法,但没有任何帮助。 我把错误和我的想法放在下面。我希望你能教我避免这种错误的正
我正在尝试重命名在 SVN 中跟踪的 Java 包。这一切似乎都有效。它将代码移动到新包等。然而,噩梦就在那时开始,乐趣就开始了,这取决于你的观点。摆脱旧包很难。 我陷入了“过时”或“不存在”消息的循
我们使用 NLog 或 Serilog 进行日志记录。我们正忙于将系统从 ASP.NET 移植到 ASP.NET Core,这 has logging built in . 理想情况下,我们希望放弃
ETag header 的定义 ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag ): The ETag HTTP re
我是一名优秀的程序员,十分优秀!