【问题标题】:Backbone 1.1.0 Views - Reading OptionsBackbone 1.1.0 视图 - 阅读选项
【发布时间】:2013-10-11 18:57:48
【问题描述】:

Backbone.js 1.1.0 的更新日志指出:

Backbone Views 不再自动附加作为 this.options 传递给构造函数的选项,但如果你愿意,你可以自己做。

我的问题是我现在该怎么做?以前,我的视图中经常出现this.var = this.options.var

【问题讨论】:

标签: backbone.js


【解决方案1】:

如果您想访问传递的选项 - 只需保存它们:

initialize: function (options) {
  this.options = options || {};
}

如果你使用 ES6:

initialize (options = {}) {
  this.options = options;
}

如果您想为所有 Backbone.View 保存传递的选项,您可以覆盖 constructor,例如 ncksllvn suggested below

【讨论】:

  • 有什么理由不包括 typeof 选项!== 'undefined' check?
  • @mikeyUX,无论如何this.options 将是undefined :)
  • 如果你采取这条路线,还需要记住一些其他的事情:1) 没有定义 initialize() 的视图需要像上面一样添加一个,2) 任何直接调用初始化(例如,不使用 new 关键字)需要将选项作为参数传递。
  • @Kyle 我认为您不能将options 作为参数传递。它不是必须在attributes 散列中吗?如果你这样做了,为什么不直接命名所有属性而不是选项呢?到目前为止,由于这个原因,上述解决方案对我不起作用..
  • 这样做有意义吗。options = arguments || {} 并留下一个空参数?
【解决方案2】:

我的团队已经投入到在某些情况下使用this.options,我不想为Backbone.View 的每个子类都修改initialize 方法。加载 Backbone 后,我们会覆盖 Backbone.View constructor,类似于 McGarnagle 的答案,但可以无缝集成:

// Compatibility override - Backbone 1.1 got rid of the 'options' binding
// automatically to views in the constructor - we need to keep that.
Backbone.View = (function(View) {
   return View.extend({
        constructor: function(options) {
            this.options = options || {};
            View.apply(this, arguments);
        }
    });
})(Backbone.View);

【讨论】:

  • var view = new Backbone.View();在这种情况下 view.options 将是未定义的。
【解决方案3】:

还值得一看 backbone.viewOptions,了解支持白名单和默认值的视图选项的极简实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-12
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多