[英]Referencing another function in array of functions
I'm using require.js and have a library of functions I use in multiple places. 我正在使用require.js,并具有在多个地方使用的函数库。 I define the functions thusly:
我因此定义了这些功能:
define(function (require) {
"use strict";
var $ = require('jquery');
var UsefulFuncs = {};
UsefulFuncs.hideAlert = function() {
$('.alert').hide();
};
UsefulFuncs.loadURL = function (url){
navigator.app.loadUrl(url, { openExternal:true });
return false;
};
UsefulFuncs.linkClicked = function (e) {
e.preventDefault();
var url = $(e.currentTarget).attr("rel");
this.loadURL(url);
};
return UsefulFuncs;
});
Then, in my backbone view, I call a function from the library with: 然后,在主干视图中,我使用以下代码从库中调用一个函数:
UsefulFuncs = require('app/utils/useful_func'),
....
UsefulFuncs.linkClicked
This works fine for any standalone function in the library eg hideAlert(). 这对于库中的任何独立功能(例如hideAlert())都适用。 However when one function in the library refers to another, such as linkClicked() calling loadURL(), I get an error:
但是,当库中的一个函数引用另一个函数时,例如linkClicked()调用loadURL(),我得到一个错误:
Uncaught TypeError: Object [object Object] has no method 'loadURL'.
Any ideas how I can reference loadUrl()? 有什么想法可以参考loadUrl()吗?
Try something like this: 尝试这样的事情:
define(function (require) {
"use strict";
var $ = require('jquery');
var hideAlert = function() {
$('.alert').hide();
};
var loadURL = function (url){
navigator.app.loadUrl(url, { openExternal:true });
return false;
};
var linkClicked = function (e) {
e.preventDefault();
var url = $(e.currentTarget).attr("rel");
loadURL(url);
};
return {
hideAlert : hideAlert,
loadURL : loadURL,
linkClicked : linkClicked
};
});
I would assume you set UsefulFuncs.linkClicked
as a handler for an event. 我假设您将
UsefulFuncs.linkClicked
设置为事件的处理程序。
If you were to use it like this: 如果要像这样使用它:
UsefulFuncs.linkClicked()
, this
inside the function would refer to UsefulFuncs
, so this.loadURL()
would be valid. ,
this
函数内部的这个对象将指向UsefulFuncs
,因此this.loadURL()
是有效的。
However, since you set it as a handler for an event, it can be called in other ways, and this
is set to some other object (probably the element which triggered the event). 但是,由于您将其设置为事件的处理程序,因此可以通过其他方式调用它,并将
this
设置为其他某个对象(可能是触发事件的元素)。 To avoid the event handling mechanism changing your this
, you can bind the function when you assign it: 为了避免事件处理机制更改
this
,可以在分配函数时绑定该函数:
element.onclick = UsefulFuncs.linkClicked.bind(UsefulFuncs);
Another way to go around it is to avoid using this
in the handler, like so: 解决该问题的另一种方法是避免在处理程序中使用
this
,如下所示:
UsefulFuncs.linkClicked = function (e) {
e.preventDefault();
var url = $(e.currentTarget).attr("rel");
UsefulFuncs.loadURL(url);
};
This creates a closure over UsefulFuncs
(the first method does as well, but it's more standardized). 这将创建对
UsefulFuncs
的闭包(第一种方法也可以,但是更加标准化)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.