【问题标题】:Send extra params to a view on backbone.js将额外的参数发送到backbone.js 上的视图
【发布时间】:2013-12-23 17:32:17
【问题描述】:

我正在尝试这个问题中建议的解决方案,但它不起作用

How to pass parameters to a view

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

Backbone.js - passing arguments through constructors

我正在尝试传递额外参数以在我的模板中使用,我读到我传递的所有额外参数我都可以在this.options.varName 中访问它们,但它对我不起作用。

这里是控制器代码:

servicios : function(){
    //Crea la colecion de tipos de servicios municipales

    //Crea el modelo para dar de alta un nuevo reporte de servicio municipal
    var reporteServicioSingle = new ReporteServicioSingle();

    //Crea la vista para la pantalla de servicios municipales
    var servicios_view = new Servicios({
        model      : reporteServicioSingle,
        collection : this.reportes,
        tipos      : this.tipos
    });

    // Carga la vista renderisada y inicializa foundation
    $("#app-content").html(servicios_view.render().el);
    $(document).foundation();
},

这是我的视图代码:

render: function(){
    console.log(this.options.tipos);
    this.$el.html(Handlebars.templates.servicios(this.collection));
    $(document).foundation();
    return this;
},

但是 chrome 开发者控制台,给我一个选项未定义的错误。

Uncaught TypeError: Cannot read property 'tipos' of undefined 

谢谢你,对不起我的英语不好。

【问题讨论】:

标签: javascript backbone.js


【解决方案1】:

假设您使用的是 Backbone 1.1,它不再自动将 options 参数附加到 this.options,这是一个糟糕的变化(恕我直言)。

您需要自己在初始化方法中扩展 options 参数:

initialize: function(options) {
    this.options = _.omit(options, ['model', 'collection', 'el', 'id', 'attributes', 'className', 'tagName', 'events']);
}

【讨论】:

  • 为什么不精确地提取视图所需的选项,以便至少在一个地方指定视图的界面?
  • ...因为这对可维护性很不利?
  • 一个明确的接口对可维护性来说很糟糕?什么?不知道对象的接口对于可维护性来说是很糟糕的。
  • @muistooshort ¿你是什么意思拉出选项?
  • @kentverger 他的意思是,而不是扩展 options 参数中的所有内容,只选择您打算使用的内容。我的猜测是他是一个习惯于强类型语言的程序员。然而,Javascript 的约定是不创建严格的接口(因此完全没有接口)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2016-08-24
  • 2023-02-19
  • 2021-10-01
  • 2014-04-07
相关资源
最近更新 更多