0

Knockout を使用して、Grails コントローラーから返された JSON データをテーブルにデータ バインドしようとしています。返される JSON は適切だと思います。

result
[
Object
class: "project.Person"
firstName: "Bill"
id: 2
lastName: "Fake"
__proto__: Object
, 
Object
class: "project.Person"
firstName: "Dale"
id: 3
lastName: "Fake"
__proto__: Object
, 
Object
class: "project.Person"
firstName: "Linda"
id: 4
lastName: "Fake"
__proto__: Object
]

これが私のJavaScriptです:

      var Directory =  {
        list: ko.observableArray([])
      };

      var Person = function(id, first, last) {
        this.id = ko.observable(id);
        this.firstName = ko.observable(first);
        this.lastName = ko.observable(last);
      };

      var loadPeople = function() {
        $.ajax({
          url: "${createLink(action: "getPeople")}",
          type: "post",
          contentType: "application/json",
          success:  function(result) {
            for(p in result) {
              Directory.list.push(new Person(p.id,p.firstName,p.lastName));
            }
            ko.applyBindings(Directory);
          }
        });
      };

      loadPeople();

そして最後に、私のマークアップ:

         <table>
          <thead>
            <tr><th>Id</th><th>First name</th><th>Last name</th></tr>
          </thead>
          <tbody data-bind="foreach: list">
              <tr>
                <td data-bind="text: id"></td>
                <td data-bind="text: firstName"></td>
                <td data-bind="text: lastName"></td>
              </tr>
          </tbody>
        </table>

同様の質問を見て、 , の代わりに観察可能な配列をバインディングに渡してみlist.PersonましPersonDirectory。デバッグすると、タイプDirectory.list()のサイズの配列が含まれているため、正しいように見えます。3Person

エラー:

不明なエラー: バインド属性を解析できません。メッセージ: ReferenceError: ID が定義されていません。属性値: テキスト: id

どんな助けでも大歓迎です。

4

1 に答える 1

1

その結果ブロックは、コンソールからどこで取得しましたか?これは有効なJSONではありませんが、有効なjavascriptオブジェクトのように見えます。そのような呼び出しでバインディングを適用するべきではありません。通常はdomReadyで1回発生するはずです。viewModelを更新すると、その後、バインディングが自動的に更新されます。それが要点です。

とにかく、私はこれをフィドルに投げました、そしてそれはうまくいきます。コードを壊している他の何かが起こっています。

于 2012-07-20T22:27:05.637 に答える