Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将参数传递给视图_Javascript_Backbone.js - Fatal编程技术网

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'});
    });