2009-06-08 110 views
1

使用prototype.js,我创建了这将是一个构造函数的参数自定义对象:如何使用prototype.js在回调函数中添加参数?

var options = Object.extend({month: date[0], 
          year: date[1], 
          day: date[2], 
          oncalchange: update}); 
// update is defined like that : 
var update = function(d){ 
    // bla bla 
} 

// Calling my class 
var myObject = new myClass (options); 

在oncalchange选择,我有一个名为“更新”的回调函数,该函数中的参数我的课。

现在,我想传递一个额外的参数到“更新”功能,但不是直接在类中。

我愿做这样的事情:

// element is the parameter I want to add 
var update = function(d, element){ 
    alert(element); 
} 

显然,这是行不通的,我怎么会做同样的事情?

回答

1

在原型中,可以使用bind函数(属于所有函数)预先填充值并分配上下文。您可以使用咖喱功能,而是如果你不需要使用上下文参数

例如:

var options = Object.extend({month: date[0], 
           year: date[1], 
           day: date[2], 
          oncalchange: update.bind(this,arg1, arg2)}); 

var options = Object.extend({month: date[0], 
           year: date[1], 
           day: date[2], 
          oncalchange: update.curry(arg1,arg2)}); 

对绑定的详细信息,请参阅http://www.prototypejs.org/api/function/bindhttp://www.prototypejs.org/api/function/curry关于curryad的信息

编辑

改变你的更新功能:

var update = function(element,d){ 
    alert(element); 
} 

然后使用咖喱预先定义的元素或如上结合。

我假设回调期望有一个参数的函数,并且您希望它需要一秒钟,您可以在设置回调时定义它。在这种情况下,参数的顺序非常重要。咖喱和绑定可以用来从一开始就预加载参数,因此,你想要预加载的参数应该在任何其他参数之前被定义。希望能够清除所有事情。

+0

是的,我尝试了绑定功能。 但我得到一个“未定义”变量使用绑定或咖喱。 update.bind(this,'ok') ... update.curry('ok'); ... var update = function(d,el){console.log(el); // el是undefined } – kevin 2009-06-08 08:58:32

1

我不太清楚你想完成什么,但是这样的事情?

var options = Object.extend({month: date[0], 
           year: date[1], 
           day: date[2], 
          oncalchange: function(d){ return update(d, 'somethingelse');} 
          }); 
+0

“元素”未定义使用此。 其实我实例化日历,oncalchange是一个事件函数(Prototype.emptyFunction),当我更改日历中的值时调用。 – kevin 2009-06-08 08:54:59

相关问题