Javascript 如何将参数传递给视图
我有一系列的按钮,点击后会显示一个位于按钮下方的弹出菜单。我想把按钮的位置传给视图。我该怎么做Javascript 如何将参数传递给视图,javascript,backbone.js,Javascript,Backbone.js,我有一系列的按钮,点击后会显示一个位于按钮下方的弹出菜单。我想把按钮的位置传给视图。我该怎么做 ItemView = Backbone.View.extend({ tagName: 'li', events: { 'click': 'showMenu' }, initialize: function() { _.bindAll(this, 'render'); }, render: function() {
ItemView = Backbone.View.extend({
tagName: 'li',
events: {
'click': 'showMenu'
},
initialize: function() {
_.bindAll(this, 'render');
},
render: function() {
return $(this.el).html(this.model.get('name'));
},
showMenu: function() {
var itemColl = new ItemColl();
new MenuView({collection: itemColl}); // how to pass the position of menu here?
}
});
将选项参数添加到
初始化:
initialize: function(options) {
// Deal with default options and then look at options.pos
// ...
},
然后在创建视图时传入一些选项:
var v = new ItemView({ pos: whatever_it_is});
有关详细信息:在构造菜单视图时,只需传递额外的参数。无需添加初始化
功能
new MenuView({
collection: itemColl,
position: this.getPosition()
})
然后,在菜单视图
中,您可以使用this.options.position
更新:从1.1.0开始
因此,在initialize
方法中,可以将传递的选项保存为this。选项
:
initialize: function(options) {
this.options = options;
_.bindAll(this, 'render');
},
或者使用一些更精细的方法,如从其他位置传递
new MenuView({
collection: itemColl,
position: this.getPosition()
})
添加一个options参数以在获取传递变量的视图中进行初始化
initialize: function(options) {
// Deal with default options and then look at options.pos
// ...
},
获得价值
使用-
从主干网1.1.0开始,options
参数将自动添加到视图中(有关讨论,请参阅)。现在需要手动附加每个视图的选项:
MenuView = Backbone.View.extend({
initialize: function(options) {
_.extend(this, _.pick(options, "position", ...));
}
});
new MenuView({
collection: itemColl,
position: this.getPosition(),
...
});
或者,您可以使用自动附加白色列表选项,如下所示:
MenuView = Backbone.View.extend({
options : ["position", ...] // options.position will be copied to this.position
});
使用此选项检索视图中的argumentr
// Place holder
<div class="contentName"></div>
var showNameView = Backbone.View.extend({
el:'.contentName',
initialize: function(){
// Get name value by this.options.name
this.render(this.options.name);
},
render: function(name){
$('.contentName').html(name);
}
});
$(document).ready(function(){
// Passing name as argument to view
var myName1 = new showNameView({name: 'Nishant'});
});
//占位符
var showNameView=Backbone.View.extend({
el:“.contentName”,
初始化:函数(){
//通过this.options.name获取名称值
this.render(this.options.name);
},
渲染:函数(名称){
$('.contentName').html(名称);
}
});
$(文档).ready(函数(){
//将名称作为参数传递给视图
var myName1=新的showNameView({name:'Nishant'});
});
工作示例:写改进答案,而不是集体答案。这是改进答案!这在大多数情况下都比较优雅/简单。@Cullenson:谢谢。我更喜欢这种方法的明确性,使用此选项的神奇“远距离操作”。选项让我做维护和调试噩梦。我首先看到了主干链接,但您的示例为我阐明了这一点。谢谢这已经被弃用了,你不能再使用这个了。选项
@Trip:Huh<代码>初始化:函数(选项){…}
很好,更改是主干不再自动为您设置this.options
:。从1.1.0开始,它不再工作:。这非常有效,只需在视图中添加参数初始化方法:初始化:函数(选项){alert(options.position);}@卡布萨,马帕奇不,它不起作用。此答案使用的是This.options.position
,而不是options.position
。用于将initialize
参数附加到this.options
的视图,但在1.1.0中已停止。
// Place holder
<div class="contentName"></div>
var showNameView = Backbone.View.extend({
el:'.contentName',
initialize: function(){
// Get name value by this.options.name
this.render(this.options.name);
},
render: function(name){
$('.contentName').html(name);
}
});
$(document).ready(function(){
// Passing name as argument to view
var myName1 = new showNameView({name: 'Nishant'});
});