我正在尝试使用自定义属性和函数扩展jquery元素,以便我可以随时跟踪元素并获取自定义属性。
目前我已经这样做了:
jQuery.fn.designerElement = function (tpl, cls) {
this.__template = tpl
this.des__class = cls;
this.compile = function () {
this.html(this.__template(this));
return this;
}
return this;
};
var template = Handlebars.compile(
'<div id="' + +new Date() + '" class="{{des__class}}"></div>'
);
var el = $('<div></div>').designerElement(template, "form-container");
el.attr('id', "test");
el.compile();
$('body').append(el);
现在,如果我打电话给$('#test').compile()
,它说方法未定义。
这是一个小提琴:http://jsfiddle.net/jmorvan/HLVj4/
为了解释我的上下文,我需要在对象上直接使用方法和属性才能使某些dataBinding工作,这就是为什么我不能使用.data()
。在我看来,jquery插件将是最好的方法,但我绝对错过了一些东西。
所以要明确我需要能够访问这样的属性:$('#test').__template
以及函数。
答案 0 :(得分:0)
我想你已经知道发生了什么,但这里有一个简短的解释:使用$('#test')
你正在创建一个新的jQuery对象。它包含相同的元素,但您要定义jQuery对象的属性,而不是元素。所以你要问的是,是否有一种方法可以为元素添加功能,但附加了jQuery对象。在jQuery中data()
毕竟可以用来做到这一点:
jQuery.fn.designerElement = function (tpl, cls) {
this.__template = tpl
this.des__class = cls;
this.compile = function () {
this.html(this.__template(this));
return this;
}
this.data('this', this);
return this;
};
使用以下命令检索该对象:
var test = $('#test').data('this');
另一种解决方案是将所有这些对象存储在全局可用的数组或JSON对象中。