Javascript Observable集合计数

时间:2011-06-09 05:16:04

标签: javascript silverlight

我在javascript中访问Silverlight ObservableCollection计数,但是我收到以下错误。

Microsoft JScript runtime error: System.FormatException: Input string was not in a correct format.
   at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
   at System.Convert.ChangeType(Object value, Type conversionType, IFormatProvider provider)
   at System.Windows.Hosting.ScriptingInterface.GetScriptParamValueForType(ScriptParam scriptParam, Type desiredType)
   at System.Windows.Hosting.ScriptingInterface.ConvertFromScriptParams(Type[] desiredTypes, ScriptParam[] args)
   at System.Windows.Browser.ManagedObjectInfo.ListIndexerMember.Invoke(ManagedObject obj, InvokeType invokeType, ScriptParam[] args)
   at System.Windows.Browser.ManagedObjectInfo.Invoke(ManagedObject obj, InvokeType invokeType, String memberName, ScriptParam[] args)
   at System.Windows.Hosting.ManagedHost.InvokeScriptableMember(IntPtr pHandle, Int32 nMemberID, Int32 nInvokeType, Int32 nArgCount, ScriptParam[] pArgs, ScriptParam& pResult, ExceptionInfo& pExcepInfo)

我正在使用以下代码,其中children是自定义对象的可观察集合。

            reg.OnDropping = function (sender, args) {
                if (args.toItem.Children.Count > 0) {
                    args.cancel = true;
                }
                else {
                    args.cancel = false;
                }
            }

还有其他方法可以在Javascript中访问计数吗?

此致 KARTHIK

2 个答案:

答案 0 :(得分:1)

为了从Javascript访问对象的属性,要么需要使用ScriptableMember属性标记属性,要么将其所属的类标记为ScriptableType。这些都不适用于ObservableCollection<T>类。

实用的解决方案是在自定义对象中添加HasChildren属性: -

 [ScriptableMember]
 public bool HasChildren
 {
      get { return Children.Count > 0; }
 }

答案 1 :(得分:0)

你有没有制作过observablecollection ScriptableMember?您需要在javascript中添加此属性以使其可用。请查看以下链接以获取更多信息:

Walkthrough: Calling Managed Code from JavaScript

HtmlPage.RegisterScriptableObject Method

我希望它有所帮助。