Silverlight Interop 5-列出ScriptObject的所有屬性
ScriptObject提供了GetProperty, SetProperty可以讀取及修改屬性,但是獨缺for (var p in obj)的做法一口氣列出Javascript物件所有的屬性及方法。
原本有個構想,Sivlerlight Method在承接Javascript傳來參數時,想學習jQuery利用object傳遞即興組合參數設定的寫法,例如:
$("#dvX").css({ position:"absolute", left:"2px", top:"100px", width:"200px" });
只是,即便Silverlight端用ScriptObject接下傳入的參數,若無法透過列舉方法找出其中有哪些屬性,一樣無法發揮Javascript端的隨性與彈性。
先前jssk_IsFunction的做法給了啟示示,Javascript擅長的事還是可以交給Javascript來做,這才符合"閃開! 讓專業的來"之終極奧義:
public string[] GetProperties(ScriptObject obj)
{
string script = @"
if (window.jssk_ListProperties == undefined)
window.jssk_ListProperties = function(obj) {
var a = [];
for (var p in obj)
if (typeof(obj[p]) != 'function')
a.push(p);
return a;
}
";
HtmlPage.Window.Eval(script);
return ((ScriptObject)HtmlPage.Window.Invoke(
"jssk_ListProperties", obj))
.ConvertTo<string[]>();
}
很簡單吧!