我有一个名为“X”的命名空间,它有一个getJSON
函数,用于从服务器获取某些文件。我希望使用不同的内容重用此命名空间。这是代码:
var uid = "27D76901-B6B1-B332-918B-D9F5A7152EFC";
var X = {
el: "",
elMarkup: "",
url: "",
initialize: function(el, elMarkup, url){
$.getJSON(url, function(data){
el.find("p").remove().end();
$.each(data.comments, function(key, value){
el.append(elMarkup);
})
})
}
};
X.el = $("#comments");
X.elMarkup = "<p>"+ value.content +" by "+ value.user +"</p>";
X.url = "http://example.com/getComments?uid=" + uid;
X.initialize(X.el, X.elMarkup, X.url);
我遇到elMarkup
循环的$.each
变量问题。如何动态定义此变量?谢谢!
答案 0 :(得分:1)
你可以试试这个:
X.elMarkup = function(value) {
return "<p>"+ value.content +" by "+ value.user +"</p>";
};
然后在你的$.getJSON()
回调中:
$.each(data.comments, function(key, value){
el.append(elMarkup(value));
});
也就是说,不要将X.elMarkup
定义为字符串,而是将其定义为生成所需特定html结构的回调函数。然后,您的通用initialize()
函数只需调用elMarkup()
并传递需要格式化的当前值。
请注意,如果您要将这些属性作为参数传递给X.el = ...
函数,则将属性设置为X.initialize()
并不合理。直接传递所需的值并使X.initialize()
将值保存为属性(如果需要)更有意义。或者设置属性并调用X.initialize()
不带参数。
答案 1 :(得分:1)
更改以下内容:
$.each(data.comments, function(key, value){
el.append(elMarkup);
})
到
$.each(data.comments, function(key, value){
el.append($('<p />', {"html": value.content + " by " + value.user}));
})
因为我在评论中提到的原因。