1

JQuery を使用して AJAX 呼び出しを行い、MVC コントローラーから JSON を送信しています。成功のコールバックが実行されたら、それをビュー モデルのオブザーバブルに渡します。ビュー モデルに list という名前のプロパティがあり、次の JSON を送信します。

{ Items: [ { .. }, { .. }] }

テンプレートとコンテナーは次のようになります。

<div data-bind="template: {name:'Template', data:list}"></div>

<script type="text/html" id="Template">
    <section class="List">
            <ul id="MyList" data-bind="foreach:Items">

これをビューにバインドしようとすると、エラーが発生します。

Microsoft JScript runtime error: Unable to parse bindings.
Message: ReferenceError: 'Items' is undefined;
Bindings value: foreach:Items

アイテムは正しく、ビュー モデルに正しく割り当てられており、Items プロパティが実際に未定義ではないことを確認しました。別のビューにまったく同じコードがありますが、ここでは機能しません。理由と、このエラーの原因は何ですか?

編集:私は次のように見え、バインドされているビューモデルを持っています:

function viewModel() {
   var self = this;
   self.list = ko.observable(null);
}

$.ajax({
.
.
   context: model, //reference to view model, which is a valid reference
   success: function(d) {
     this.list(d);  //d is JSON laid out above
   }
});

ありがとう。

4

2 に答える 2

1

これが何を意味するのかはわかりませんが、「d」は上記のリストではなく、関数の引数であるため、エラーが発生するはずです。ビューモデルを変数に保存して、これを変更するべきではありません:

 success: function(d) {
     d.list(d);  //d is JSON laid out above
 }

これに:

 success: function(d) {
     viewModel.list(d);  // d is JSON laid out above
 }
于 2012-05-23T19:54:17.153 に答える
0

以下が機能するはずです。

<div data-bind="template: {name:'Template', data:list}"></div>

<script type="text/html" id="Template">
    <section class="List">
            <ul id="MyList" data-bind="foreach:Items">
                <span data-bind="text: value"></span>
            </ul>
    </section>
</script>

そして、これをあなたのjavascriptとして使用してください:

function viewModel() {
   var self = this;
   self.list = ko.observable();

   self.init = function()
   {
       var data = { Items: [ { value: 1 }, { value: 2 }] }
       self.list(data);
   };

   self.init();
}

ko.applyBindings(new viewModel());

関数内でinitajax 呼び出しを実行し、データをバインドします。

于 2012-05-23T12:24:03.423 に答える