0

当进行 jQuery ajax 调用时,生成的 jqXHR 变量data将传递给renderData下面的渲染函数。$type该函数通过仅填充对象的一个​​属性来确定数据的来源。

找出哪些属性被填充以及数据来自何处的巧妙方法是什么?

function renderData(data){
    var $type = {
        contact : $(data).filter('#contact'),
        details : $(data).find('#details'),
        other   : $(data).find('#other')
    };
    // Get the populated property and store its value in "endResult"
    endResult.appendTo('#wrapper').hide().fadeIn();
};
4

2 回答 2

1

我想你也是创建对象的人,对吧?为什么不简单地向对象添加一个属性来告诉您它的用途?

例如,如果您通过从 PHP 中回显 JSON 来创建对象,您可以添加一个“类型”属性:

echo('{"type": "contactForm", ...your data goes here}');

这样,您的渲染功能变为:

function renderData(data){
    var $type = data.type;
    ...
};

如果您是对象的作者,您不必遍历属性以找出您应该已经知道的内容。如果您使用的是您无法控制的对象,Daniel 的解决方案应该这样做。

于 2013-05-01T03:19:04.000 回答
1

我可能会使用for...in循环来查找属性并将其封装在一个函数中。

jsFiddle

var type1 = {
    contact : 'a',
    details : undefined,
    other   : undefined
};

var type2 = {
    contact : undefined,
    details : undefined,
    other   : 'b'
};

var type1Prop = getPopulatedProperty(type1);
alert(type1Prop + ' = ' + type1[type1Prop]);
var type2Prop = getPopulatedProperty(type2);
alert(type2Prop + ' = ' + type2[type2Prop]);

function getPopulatedProperty(obj) {
    for (var prop in obj) {
        if (obj[prop] !== undefined && obj[prop] !== null && obj[prop] !== '') {
            return prop;
        }
    }
    return undefined;
}
于 2013-05-01T02:56:26.417 回答