2011-10-19 6 views
3

JavaScriptからSilverlight辞書にアクセスしようとしています。 hereに記載されているように、SilverlightはJavaScriptを介してアクセスできる辞書型のラッパーを作成します。JavaScriptからSilverlight辞書を反復するか?

function MyFunction(dictionary) 
{ 
    // This works okay... 
    alert(dictionary["someKey"]); 
} 

しかし、私の場合、どのキーが実際に辞書に入っているのかわかりません。しかし、MSDNのページでは、この情報にアクセスする方法は記述されていません。私は試しました:

function MyFunction(dictionary) 
{ 
    for (var item in dictionary) 
    { 
     // Do stuff 
     alert(item); 
    } 
} 

これは動作しません。私はまた、lengthtoArray()のような配列に定義されたプロパティとメソッドを使ってみました。私はkeysプロパティを推測しようとしました。言うまでもなくそれらのどれも働いていない。

これはSilverlightで公開されているラッパーでの主要な監視ですか、何か不足していますか?何が最良の選択肢ですか?

完全期すため

は、Silverlightのコードは非常に興味深いものではなく、次のようになります。

void MyMethod(IDictionary<string, string> dictionary) 
{ 
    jsObjectDefiningMyFunction.MyFunction(dictionary); 
} 

答えて

4

あなたはobject["key"]などのプロパティにアクセスすることができ、通常のJavaScriptオブジェクト(のようなを思わIDictionaryラッパーobject.keyですが、ドキュメンテーションからはサポートされている唯一のものは、既知のキーを使用するゲッター/セッターです(反復ではありません)。

JavaScript関数に別のパラメータを追加することをお勧めします。であなたがJavaScriptの側に繰り返すことができ、辞書のキー、のちょうど配列またはリストだ、すなわち

string[] keys = new string[dictionary.Keys.Count]; 
dictionary.Keys.CopyTo(keys,0); 
jsObjectDefiningMyFunction.MyFunction(dictionary, keys); 

キーは長さを使用してJavaScriptの側に繰り返すことができる配列のラッパー、と整列化されます例えばmyVar[3]

+0

+1これは最も総合的なアプローチです。 – AnthonyWJones

+0

dictionary.Keys.ToArray()としてキーを渡すだけです。 – Bryant

+0

SilverlightはKeyCollectionでToArray()メソッドをサポートしていないようです。 – jayarjo

1

あなたは何かが欠けているわけではありません。 Javascriptのfor..inの機能は、COMオブジェクトがサポートしているものではありません(これは、ラッパーが基金となるものです)。私はそれがSilverlightから達成するのはかなり難しいことだと思います。

代替案は実際にあなたのJavascriptコードが本当に必要とするものによって決まります。ここでfor..inが動作する標準のJavaScriptオブジェクトを作成する一つの方法である: - 私は、ほとんどのシナリオでは疑うしかし

 ScriptObject o = HtmlPage.Window.CreateInstance("Object"); 
     foreach (var kvp in dictionary) 
     { 
      o.SetProperty(kvp.Key, kvp.Value); 
     } 

     jsObjectDefiningMyFunction.MyFunction(o); 

は、これは非常に非効率的なアプローチですが、実際にはJavaScriptの使用シナリオに依存しません。例えば、これは多くのJQueryメソッドに渡されるオブジェクトを構築するのに最適です。一方、時折、単一のアイテムの現在の値を調べることはひどく、その値を更新する必要がある場合は役に立たない。

関連する問題