1

getJSON から受信したコレクションがある場合、Knockout を動作させることができないようです。これが私のコードの例です

function MyTestModel() {
     this.modelProperty = ko.observable();
     this.myCompute = ko.computed(function () {
          return "test";
});
}

function MyViewModel() {
     var self = this;
     self.myTestModels = ko.observableArray();
}

var vm = new MyViewModel();
ko.applyBindings(vm);

$(document).ready(function () {
$.getJSON("http://MyUrl.com/api/MyController", function (data) {
    var observableData = ko.mapping.fromJS(data);
    var array = observableData();
    vm.myTestModels(array);
     });
  });

 <tbody data-bind="foreach: myTestModels">
    <tr>
        <td data-bind="text: modelProperty" ></td>
        <td data-bind="text: myCompute" ></td>
    </tr>
 </tbody>

 [{"modelProperty":"My Property 1"},{"modelProperty":"My Property 2"}]

modelProperty のデータは表示されますが、Chrome JavaScript コンソールには次のように表示されます: Uncaught Error: Unable to parse bindings. メッセージ: ReferenceError: myCompute が定義されていません。バインディング値: テキスト: myCompute

ko.mapping.fromJS が MyTestModel に変換していないようです。これは、ノックアウトが MyTestModel について知らないためだと思いますが、私のモデルについてどのように伝えればよいかわかりませんか?

とにかく、みんなの時間をありがとう!

4

1 に答える 1

3

配列項目を MyTestModel に変換するように指定していません。

これにより、各配列項目が MyTestModel に変換されます。

$(document).ready(function () {
    $.getJSON("http://MyUrl.com/api/MyController", function (data) {
        var array = ko.utils.arrayMap(data, function (item) {
            return new MyTestModel(item.modelProperty);
        });
        vm.myTestModels(array);
    });

フィドルを見る

お役に立てば幸いです。

于 2013-06-20T17:51:33.350 に答える