【问题标题】:Backbone view instantiation issue主干视图实例化问题
【发布时间】:2011-12-23 17:36:00
【问题描述】:

没想到,下面的代码会打印Test1 undefined而不是Test1 Test2

var MyView = Backbone.View.extend({
    initialize: function () {
        console.log(this.collection, this.test);
    }
});

new MyView({collection: "Test1", test: "Test2"});

我做错了什么?

【问题讨论】:

    标签: backbone.js


    【解决方案1】:

    只有 options 参数中的以下属性会合并为视图属性。

    模型、集合、el、id、属性、className、tagName (See the source code)

    任何其他属性都被放置在视图的 options 属性上。

    因此,要从初始化方法访问 test 属性,您可以按如下方式更新您的代码。

    console.log(this.collection, this.options.test);
    

    【讨论】:

    • 呃,为什么!?这似乎是不必要和不自然的。
    • @Randomblue:听说过封装吗?而这种行为是documented interface 的一部分,因此不足为奇。
    • @muistooshort:不是真的。你能指出一篇解释封装的好文章吗?
    • @Randomblue:封装是一个非常基本的编程概念,可能从Wikipedia开始。如果 Backbone 将整个选项对象复制到 this 中,那么您将覆盖内部方法和属性,这将导致各种奇怪而有趣的错误。
    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-19
    相关资源
    最近更新 更多