【发布时间】:2011-12-26 09:49:51
【问题描述】:
我正在使用 BorisMoore 的名为 JsRender 的 jQuery 插件。
主页上一切正常,但是当我浏览联系页面时,插件不起作用:
chrome 控制台中的错误消息
Uncaught TypeError: object is not a function
jquery.tmpl.js:329
Uncaught Template command not found: getDay
js:2000
我注册我的标签如下:
var blogMarckuptmpl = '<li>' + '<div class="blog-date">' + '<img src="@Url.Content("~/Images/calendar.png")" alt="Calendário" />' + '<span class="blog-dateDay">{{getDay publishedDate}}</span>' + '<span class="blog-dateMonth">{{getMonthName publishedDate}}</span> ' + '</div> ' + '<div class="blog-text">' + '<a href="{{=link}}" target="_blank" title="{{=title}}">' + '<h4>{{=title}}</h4>' + '</a>' + '<p>{{=contentSnippet}}</p>' + '</div>' + '</li>';
$.template("blogTmpl", blogMarckuptmpl);
$.views.registerTags({
getDay: function(val) {
return new Date(val).getDate();
},
getMonthName: function(val) {
return new Date(val).toString("MMM").toLowerCase();
}
});
var feedBlog = new google.feeds.Feed("http://blog.bindsolution.com/rss");
feedBlog.setNumEntries(4);
return feedBlog.load(function(blogFeedResult) {
if (!blogFeedResult.error) {
$("#blog-feed").html($.render(blogFeedResult.feed.entries, "blogTmpl"));
}
}
浏览JsRender源码发现在$.template(tmpl)函数的联系页面上返回的是一个对象而不是一个匿名函数(和主页一样)。
更多信息
为便于理解,截取了调试chrome的图片:
每页两张图片(联系页面和主页)
第一张图片(最后是1)是$.template(tmpl)之前的调试,第二张(结尾2)是$.template(tmpl)之后的调试。
注意作用域变量中的tmpl 对象(右侧)
首页(之前):tmpl字符串类型
主页(之后):
注意范围变量中的tmpl 对象(右侧)
他是一个匿名函数! (正确!)
联系页面(之前):tmpl 字符串类型
联系页面(之后):
注意范围变量中的tmpl 对象(右侧)
tmpl 是对象类型!!??
** 调试图像 **
主页(之前)
tmpl字符串类型
主页(之后)
注意作用域变量中的tmpl 对象(右侧)
他是一个匿名函数! (正确!)
联系页面(Begore)
tmpl字符串类型
联系页面(之后)
注意作用域变量中的tmpl 对象(右侧)
tmpl 是对象类型!!??
【问题讨论】:
-
什么叫“渲染”函数?。
-
另外,返回的对象中有什么?
-
JsRende 相信。但我设法解决了这个问题。我会发布决议。
标签: javascript jquery-plugins anonymous-function jquery-templates