为模型问题传递变量
Passing variable for model issue
我有一个backbonejs应用程序,有一个父视图,如:
var LibraryView = Backbone.View.extend({
initialize: function(options) {
if (options) {
_.extend(this, options);
}
this.render();
alert(this.model); //Alerts Object Object like it's supposed to
_.each(this.model.get("library").books, function(book){
var bookView = new BookView({
el: $('#books'),
book: book,
model: this.model
});
bookView.render();
});
}
});
和我的bookView看起来像:
var BookView = Backbone.View.extend({
initialize: function(options) {
if (options) {
_.extend(this, options);
}
alert(this.model); // Alerts undefined
}
});
基本上,我想通过这个。模型从LibraryView到BookView,但当我这样做时,BookView的alert(this.model)
警报未定义?
我应该提到,当我在我的BookView上alert(this.book)
时,它不是未定义的
这是因为this
已经改变了_.each中的上下文。关于它的帖子有上百万条,所以我就不解释了。以这样的结尾(以this结尾)来保持上下文:
_.each(this.model.get("library").books, function(book){
var bookView = new BookView({
el: $('#books'),
book: book,
model: this.model
}, this);
也查看下划线的_.bindAllhttp://underscorejs.org/bindAll
您的问题与this
的定义方式有关。this
在函数体中的含义由如何调用父函数来控制。幸运的是,_.each
允许您将上下文(在函数体中等同于上下文)作为可选的第三个参数传入。这里的文档:http://underscorejs.org/#each。
不幸的是,这只为第一个函数绑定了this的值,这个函数是您传递给_.each
函数的匿名函数。当您调用BookView
构造函数时,这不会绑定this
,因为它是一个单独的函数。当你调用一个函数时,它会创建一个单独的作用域,这意味着它的值不同。一个解决方案是在构造函数中使用bind
。
Try this:
_.each(this.model.get("library").books, function(book){
var bookView = new BookView({
el: $('#books'),
book: book,
model: this.model
}).bind(this);
bookView.render();
}, this);
进一步的阅读可以在这里找到this
的不同定义方式以及如何使用_.bind
和_.bindAll
: http://blog.bigbinary.com/2011/08/18/understanding-bind-and-bindall-in-backbone.html
- 简单的变量问题
- 局部全局变量问题 - JavaScript
- 递归承诺调用 - 内存范围变量问题
- 开关变量问题
- 简单的 Jquery 变量问题
- Javascript全局变量问题
- Javascript-通过引用传递变量问题
- AJAX请求在jQuery中获取函数,变量问题
- JSON JavaScript 未定义的变量问题
- PHP 和 JavaScript 组合变量问题
- JQuery Ajax 填补了 JavaScript 变量问题
- jQuery.ParseJSON 变量问题
- Ajax变量问题
- socket.io-使用命名空间时出现套接字变量问题
- AngularJS与SignalR$范围变量问题
- 使用事件处理程序(基本Javascript)时出现全局变量问题
- JavaScript 声明变量问题
- JavaScript变量问题的澄清
- jQuery变量问题
- JS -访问全局变量问题