3

我有一个名为“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如何动态定义这个变量?谢谢!

4

2 回答 2

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()并不带参数调用。

于 2013-05-20T09:40:50.343 回答
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}));
})

因为我在评论中提到的原因。

于 2013-05-20T09:41:04.090 回答