2

我正在尝试将参数传递到 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工作正常(我可以使用 jquery with 访问它this.$el.),但this.magic两者this.templateString都未定义......

有什么方法可以按照我上面尝试的方式将参数传递到视图中?

在相关说明中-有什么方法可以传递渲染功能吗?我最初尝试传入一个渲染函数(并将其从主干视图类中删除),但是当这不起作用时,我尝试传入简单的数据类型......我假设需要做任何事情来传递一个我的第一个问题的参数将用于传递函数。

4

3 回答 3

6

编辑 - 显然这个答案在较新版本的 Backbone 中不起作用。

我想到了!这很简单……只需要快速检查一下 Backbone.js 文档……就应该先这样做。

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

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

From my example above, I can get access to magic by using this.options.magic, instead of this.magic.

Yay!

于 2013-07-10T01:36:04.597 回答
2

stuff that is not unique to the framwork goes to options

look in

this.options.magic

于 2013-07-10T01:37:35.307 回答
2

In more recent version of Backbone (mine is 1.1.2) you can copy View constructor options this way:

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

Credits goes to this github issue.

于 2015-01-29T16:11:00.207 回答