0

TreeTable プラグインを使用しています: http://ludo.cubicphuse.nl/jquery-treetable/#examples

<table id="example-basic">
    <thead>
        <tr>
            <th>Name</th> <th>Status</th> <th>id</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: TreeView">
        <tr data-bind="attr: { 'data-tt-id': id ,'data-tt-parent-id': Parentid}">
            <td data-bind="text: Name"></td>
            <td data-bind="text: Status"></td>
            <td data-bind="text: id"></td>
        </tr>

    </tbody>
</table>
 <button type="button" name="test" onclick="test()"></button>

以下は、ハードコードをそのまま実行すると機能し、結果は適切にフォーマットされた TreeView として表示されます。

ko.applyBindings({ TreeView: [{ "id": "1", "Parentid": null, "Name": "test1", "Status": "OK" }, { "id": "2", "Parentid": 1, "Name": "test2", "Status": "OK" }] }

しかし、私はサーバーから値を取得しており(サーバーから取得した値を「str」変数に入れています)、以下のようにバインディングを行っています。

str = '[{ "id": "1", "Parentid": null, "Name": "parent1", "Status": "OK" }, { "id": "2", "Parentid": 1, "Name": "child1", "Status": "OK" }]',
json = JSON.stringify(eval("(" + str + ")")),
ko.applyBindings({ TreeView: json})

 function reload() {
            //ko.applyBindings({ TreeView: {} });
 str = '[{ "id": "1", "Parentid": null, "Name": "parent1", "Status": "OK" }]'
 json = JSON.parse(str),
ko.applyBindings({ TreeView: json})

次のエラーが表示されます。

エラー: バインディングを解析できません。
メッセージ: ReferenceError: 'id' は定義されていません。
バインディング値:attr: { 'data-tt-id': id ,'data-tt-parent-id': Parentid}

誰か助けてください。ありがとう!返された Json オブジェクトは、string 型に変換してから解析する必要がありました。これにより、上記の問題が解決されました

新しい問題: treetable プラグインをいじっていました。ボタンのクリック (または 5 秒ごとの ajax 呼び出し) でサーバーからデータをリロードしたいと考えています。データが複製されます。

4

1 に答える 1

0

JSONを解析する代わりに文字列化し、eval()必要のないときに使用しています。代わりに、 を使用してJSON.parse()ください。

var str = '[{ "id": "1", "Parentid": null, "Name": "parent1", "Status": "OK" }, { "id": "2", "Parentid": 1, "Name": "child1", "Status": "OK" }]';
var json = JSON.parse(str);
ko.applyBindings({ TreeView: json });
于 2013-10-18T03:17:22.427 に答える