3

私が取り組んでいるプロジェクトでは、やや複雑な XML ファイルで多くの作業が必要になるため、それらを SimpleXML 配列に変換し、JSON エンコードして、Ajax 経由で Knockout に渡します。

問題は、各プロパティのほとんどに属性があり、SimpleXML がそれを というオブジェクトに押し込むこと@attributesです。のようにバインドしようとするとmyObject().@attributes.Name、エラーが発生します

Message: SyntaxError: Unexpected token ILLEGAL;
Bindings value: text: alertObj().@attributes.Name 

試してみ'@attributes', ['@attributes'], [@attributes]ましたが、何も機能していません。また、さまざまなエスケープ文字と Unicode エスケープも試しました。

json は次のようになります。

        var alertObject =
            {
                "@attributes":
                    {
                        "DescriptionContentType":"text\/plain",
                        "Description":"",
                        "IsActive":"true",
                        "Name":"Apache Requests Per Interval"
                    },
                "Frequency":
                    {
                        "PeriodInSeconds":"60"
                    },
                "MetricLevelNotification":"false",
                "AlertTriggerMode":"2",
                "CautionActionDelay":"0",
                "DangerActionDelay":"0",
                "CautionActionList":
                    {
                        "ActionID":
                            {
                                "ManagementModuleName":"Base Module",
                                "ConstructName":"Base SMTP Mail Action"
                            }
                    },
                "DangerActionList":
                    {
                        "ActionID":
                            {
                                "ManagementModuleName":"Base Module",
                                "ConstructName":"Base SMTP Mail Action"
                            }
                    },
                "MetricGroupingID":
                    {
                        "ManagementModuleName":"Base Module",
                        "ConstructName":"Apache Requests Per Interval"
                    },
                "AlertCombineOperator":"1",
                "AlertCompareOperator":"2",
                "CautionTargetValue":"2000",
                "DangerTargetValue":"15000",
                "CautionMinNumPerPeriod":"3",
                "CautionAlertPeriod":"6",
                "DangerMinNumPerPeriod":"1",
                "DangerAlertPeriod":"1"
            };

構造と名前を変更することは避けたいと思います。

どうすればこれを機能させることができますか??

4

2 に答える 2

5

これは、有効なjavascript変数名ではないためです。

識別子は、$、_、またはUnicodeカテゴリの任意の文字「大文字(Lu)」、「小文字(Ll)」、「大文字(Lt)」、「修飾子文字(Lm)」、「その他」で始まる必要があります。文字(Lo)」または「文字番号(Nl)」。

http://mathiasbynens.be/notes/javascript-identifiersから

変数名を@で始めることはできないため、エラーが表示されます。一重引用符や角かっこなどを追加しても意味がありません。変数名は単に無効であり、サーバーからデータが返される方法を変更する必要があります。

于 2012-10-11T04:17:47.197 に答える
1

私は同様の問題に直面しましたが、サーバーからデータが返される方法を確実に変更する必要があることに完全に同意します。ただし、データを実際に制御できない場合、または現時点でデータに影響を与えることができない場合は、次を使用して必要なものをレンダリングできる場合があります。

$data['@attributes'].Name
于 2013-03-12T13:00:59.080 に答える