2013-11-23 81 views
0

我试着传递一些参数来查看构造函数。传递参数来查看

我以这种方式创建我的对象:new HeadCell({isSortable: true, parent: this});

所以在HeadCell初始化:

initialize: function(options){ 
    console.log("HeadCell initialized"); 
    console.log(options); 
    console.log(options.isSortable); 
} 

控制台输出为:

HeadCell initialized
Object {isSortable: true, parent: r}

Uncaught TypeError: Cannot read property 'isSortable' of undefined

任何想法?

更新1

林尝试运行在拨弄一个小测试,结果是一样的。

http://jsfiddle.net/ramiromd90/hHFP3/

更新2

我尝试拨弄你的例子,和正常工作!但是,在我的代码不起作用。

在这里与我的实际代码一个小例子小提琴:

http://jsfiddle.net/ramiromd90/XCK47/

更新3

感谢所有的答复,问题是,我不传递回路参数(见小提琴)。传递参数的方法我们说的是正确的!由于

+0

工作正常(http://jsfiddle.net/ambiguous/3HTq2/),你能提供你的问题的演示? –

+0

@ muistooshort我用一个小提琴示例更新线程。 – ramiromd

+2

你有'initialize:function(){'在你的小提琴中,但'initialize:function(options){'在你的问题中,后者工作正常(http://jsfiddle.net/ambiguous/bcU57/)。视图不会自动设置'this.options',它在版本1.1中被删除了:http://backbonejs.org/#changelog –

回答

4

在提琴的代码不正确,因为你调用this.options时的选项参数是永远初始化为视图对象的一部分。换句话说,你打电话给一个不存在的财产

试试这个:

$(function(){ 
    var Aview = Backbone.View.extend({ 
     initialize: function(options){ 
      console.log(options.foo); 
      console.log(options.bar); 
     } 
    }); 

    new Aview({foo:'isFoo!',bar:'isBar!'}); 
}); 

现在,让我们进入什么实际发生,当你把它作为参数传递给构造函数的参数选项多一点细节。

按照doc

有迹象表明,如果获得通过,将直接连接到视图几个特殊选项:模型,收藏,萨尔瓦多,ID,类名,标签名,属性和事件。

这是什么意思?那么,options参数实际上在视图构造函数中有两种使用方式。

首先,它使用此调用

_.extend(this, _.pick(options, viewOptions)); 

仅返回包含在viewOptions特殊选择一个新的对象,然后添加到视图对象的那些选项设置特殊选项

接下来,一旦添加了这些特殊选项,它就会调用初始化函数。

this.initialize.apply(this, arguments); 

在这种情况下,它相当于调用

currentViewObject.initialize({anOptionsAttribute: 'hello'}); 

它允许您访问选项对象无论是作为一个参数,或者通过arguments对象。正如你所看到的,选项参数并没有被设置为一个属性,因此调用this.options只是无意义的。

1
View = Backbone.View.extend({ 
    initialize: function(options){ 
    console.log(options); 
    console.log(options.isSortable); 
    } 
}); 

var view = new View({isSortable: true, parent: this }); 

http://jsfiddle.net/sbjaz/2/

我不明白为什么它不工作。你检查过拼写吗?

“this.options”骨干辗转1.1.0 看到:

http://backbonejs.org/#upgrading

In 1.1, Backbone Views no longer have the options argument attached as this.options automatically. Feel free to continue attaching it if you like.

+0

我发布了一个小提琴,比如推荐Colin(使用this.options)并且不为我工作。 – ramiromd

+0

我认为你使用的是旧版本的backbonejs。我尝试了与主干1.0相同的小提琴,它的工作非常好。 –

+0

等,我错了。这个选项只存在于旧版骨干网中,并且你使用的是最新版本,默认情况下它没有这个选项。我更新了我的小提琴:http://jsfiddle.net/sbjaz/2/ –