使用jquery tmpl时在原型方法中访问自定义obj属性的差异

时间:2011-04-17 15:33:24

标签: javascript jquery jquery-templates

我不太确定我的方法是否已关闭,或者我是否需要一种优雅的方式来解决我正在做的事情。

我有一个自定义的Javascript对象,在这个例子中称为Dude Dude有一个名为'height'的属性,在其原型上定义了一个名为'reallyTall'的方法

var Dude = function(props) {
    this.height = "tall";
};
Dude.prototype.reallyTall = function() {
    return this.height + " as heck";
};

我正在创建一个Dudes数组(在这个例子中只有一个项目),并且想使用jquery.tmpl()来接受我的Dudes并以某种方式将它们附加到我的HTML中的div。 (不是为了这个简单的例子而缓存模板)

var guy = new Dude();
jQuery.tmpl("<li>${reallyTall}</li>", guy).appendTo('#foo');

其中#foo为空&lt; ul&gt;在HTML

我想保持我的Dude对象'通用',以便如果有人不想将它们与jquery.tmpl一起使用,它们就不必......意思是,有人可能想要实现类似的东西到上面,而是做一些像:

jQuery("#foo").append('<li>' + guy.reallyTall() + '</li>'));

这就是我的问题出现的地方 - 在realTall方法中 this 的值。

当不使用tmpl()时,我只需执行

即可访问Dude的高度属性
this.height

但是当使用tmpl()时,我必须像这样访问它:

this.data.height

我可以在reallyTall方法中做这样的事情:

this.height || this.data.height

但这看起来很脏 我希望有人能更好地解决我的问题,或者可以指出我是否在这里错误地使用了jquery.tmpl()。

这是我的例子的小提琴:
    http://jsfiddle.net/FTF5M/2/

1 个答案:

答案 0 :(得分:0)

尝试在模板中使用${$data.reallyTall()}

http://jsfiddle.net/rniemeyer/9CtsV/