如何将参数传递到Backbone.js视图中

How can I pass a parameter into a Backbone.js view?

本文关键字:js 视图 Backbone 参数传递      更新时间:2023-09-26

我正试图将一个参数传递到Backbone.js视图中,但遇到了问题。

我的主干视图如下:

var DataTypesView = Backbone.View.extend({
    events:{
        'click .datatype': 'add'
    },
    initialize: function(){
        console.log(this.magic);
        this.render();
    },
    render: function(){
        console.log('printing template');
        console.log(this.templateString);
                    etc.
}});

稍后,我将视图装箱如下:

        dataTypesView = new DataTypesView({magic:true,el:$('#dataViewSpace'),templateString:'#template'});

它不起作用。我不明白的是为什么el工作得很好(我可以使用带有this.$el.的jquery访问它),但this.magicthis.templateString都是未定义的。。。

有没有什么方法可以像上面尝试的那样将参数传递到视图中?

与此相关的是,我有什么方法可以传入render函数吗?我最初尝试传入一个render函数(并将其从主干视图类中删除),但当它不起作用时,我尝试传入简单的数据类型。。。我假设,为我的第一个问题传递参数所需要做的一切都将适用于传递函数。

EDIT-显然这个答案在更新版本的Backbone中不起作用

我想通了!这很简单。。。只需要快速查看一下Backbone.js文档。。。应该先这么做。

传入后,以下参数将自动分配给视图(也就是说,您可以使用this.variableName访问它们):模型、集合、el、id、className、tagName和属性

可以使用this.options.variableName访问所有其他变量。

从上面的例子中,我可以通过使用this.options.magic而不是this.magic来访问magic

耶!

不是框架唯一的东西进入选项

在中查找

this.options.magic

在最新版本的Backbone(我的版本是1.1.2)中,您可以通过以下方式复制View构造函数选项:

initialize: function(options) {
  _.extend(this, _.pick(options, 'several', 'specific', 'options'));
}

这个github问题值得称赞。