Silverlight Interop 8 - 傳遞Dictionary<string, string>到Javascript端

做實驗驗證了Silverlight傳送Dictionary<string, string>到Javascript端的行為。

依據MSDN文件的說法:

By default, properties and return values typed as IDictionary are returned by reference, using a JavaScript wrapper that is similar to a dictionary.

Javascript Dictionary Wrapper提供obj[key]、obj.key的存取方式,並可新增key/value,但不支援for (var p in obj)的Javascript Key列舉。如果想要支援Key列舉及其他功能,還是得回歸Javascript Object。

以下程式示範傳回Dictionary<string, string>及將其轉為Javascript Object的兩種做法:

public Page()
{
    InitializeComponent();
    if (HtmlPage.IsEnabled)
    {
        HtmlPage.RegisterScriptableObject("JSIO", this);
    }
}
[ScriptableMember]
public Dictionary<string, string> GetDictionary()
{
    Dictionary<string, string> dict = new Dictionary<string, string>();
    dict.Add("A", "公理號");
    dict.Add("B", "大買家");
    //會傳回被Javascript Dictionary Wrapper包裝的Managed Object到Javscript端
    return dict;
}
[ScriptableMember]
public ScriptObject GetJSDictionary()
{
    //將Dictionary<string, string>轉成標準Javascript Object
    Dictionary<string, string> dct = GetDictionary();
    ScriptObject jsDct = HtmlPage.Window.Eval("new Object()") as ScriptObject;
    foreach (string k in dct.Keys)
        jsDct.SetProperty(k, dct[k]);
    return jsDct;
}

前端測試時,for (var p in d1)迴圈執行次數為零,但可以使用d1.A或d1["B"]存取Dictionary內的儲存值;包裝為Javascript Object後,使用起來就如同一般物件,支援for (var p in d2)。

    function onSilverlightLoad(sender, args) {
        var slCtl = sender.getHost();
        var jsio = slCtl.Content.JSIO;
        var d1 = jsio.GetDictionary();
        for (var p in d1)
            alert("d1.Foreach: " + p);
        alert("d1.A=" + d1.A); alert("d1.B=" + d1["B"]);
        var d2 = jsio.GetJSDictionary();
        for (var p in d2)
            alert("d2.Foreach: " + p + "->" + d2[p]);
    }
歡迎推文分享:
Published 02 June 2010 03:47 PM 由 Jeffrey
Filed under: ,
Views: 7,023



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<June 2010>
SunMonTueWedThuFriSat
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication