mongodb と ajax 呼び出しを使用してデータを取得しています。javascript オブジェクトになると、html を生成するために使用するプロパティが存在しないことがあります。この呼び出しを見てください:
$.ajax({
url: 'api/v1/mention/'+id,
type: "GET",
dataType: "json",
data : {login : "demo"},
success: function(mention) {
display_mention_text(mention.texto);
}
});
この場合、mention.texto を呼び出していますが、mention.picture または任意のプロパティである可能性があります。定義されていないことがあり、アプリがクラッシュすることがあります。
このメソッドはオブジェクトからプロパティを呼び出し、未定義の場合は空の文字列を返します。このメソッドを呼び出すためのいくつかの例 (最初のものはオブジェクトで、他はプロパティです):
get_property(mention,"text")
get_property(mention,"user","name")
get_property(mention,"picture")
メソッドは次のように定義されます。
function get_property(obj){
var args = Array.prototype.slice.call(arguments),
obj = args.shift();
if (checkNested(obj,args)) {
//what should I do here?
} else{
//the property is undefined and returns ""
"";
};
}
//check if a object has N levels of propertys
function checkNested(obj /*, level1, level2, ... levelN*/) {
var args = Array.prototype.slice.call(arguments),
obj = args.shift();
for (var i = 0; i < args.length; i++) {
if (!obj.hasOwnProperty(args[i])) {
return false;
}
obj = obj[args[i]];
}
return true;
}
最初の get_property メソッドで、プロパティが存在する場合、どのように呼び出すのですか?? オブジェクトとそのプロパティを次のような配列として保持します。
params = ["user","name"]
しかし、次のように呼び出すことはできません:
object.["user","name"]