我正在使用Javacript(使用jQuery)为我的用户界面创建Manager对象。总体思路是捕获所有可点击的元素(使用.clickable类定义),然后根据该元素的ID创建相应的对象以处理所需的操作。
这是我的Manager对象定义:
function Manager() {
this.init = function() {
$('.clickable').click( function() {
var l = this.id.split("_");
var controller = Manager.ucfirst(l[0]) + "()";
var action = l[1];
var nclass = new controler;
});
};
this.init();
}
当用户单击可点击元素时,例如
<a id="user_login" class="clickable">Login</a>
然后,该管理器应创建一个对象User(ID的第一部分,带有大写的第一个字母),然后执行方法login(ID的第二部分)。
但是实际上发生的是,当我单击该元素时,我收到一个“未捕获的TypeError:字符串不是函数”。
好吧,我知道字符串不是函数!但是我假设Javascript很聪明,在PHP中有类似$$$ variable的东西。
我做了一些研究,但没有实际结果。有人可以帮我吗?
您可以按照以下方式进行操作:
function Manager() {
this.init = function() {
$('.clickable').click( function() {
var l = this.id.split("_");
var controller = Manager[l[0][0].toUpperCase() + l[0].substring(1)];
var action = l[1];
var nclass = new controler;
});
};
this.init();
}
关键是您应该为控制器分配一个函数类型,而不是一个看起来像函数调用表达式的字符串。如果所引用的Manager实例具有定义的属性,该属性被称为的评估,则该方法应该起作用Manager[l[0][0].toUpperCase() + l[0].substring(1)]
。否则,它将失败。
我必须说您的问题的背景对我来说不是很清楚,所以我建议采用以下方法可能会更好,更全面地解决您的问题:
var Manager = ({
User: function(){ // here's your user constructor
// ...
},
init: function() {
var self = this;
$('.clickable').click( function() {
var l = this.id.split("_");
var controller, nclass,
action = l[1],
controllerName = l[0][0].toUpperCase() + l[0].substring(1);
if(self[controllerName]){ // checking if it exist cos you never know where the shit that happens all come from.
controller = self[controllerName]; // returns the constructor
nclass = new controler; // invokes the constructor
} else{
throw new Error("Don't know what to do with unknown controller: '" + controllerName + "'";
}
});
return this; // i.e self
}
}).init();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句