1

KnockOut.js で foreach ループを動作させるのに問題があり、コードでエラーをスローしようとしてもスローされません。テーブルにまったくバインドしようとしていないかのようです。

var History = function (data) {
    this.Average = ko.observable(data.Average);
    this.Count = ko.observable(data.Count);
};

var DataSource = function (data) {
    var convertData = function (array) {
        return $.map(data.Data, function (option) {
            return new History;
        });
    };

    this.Data = ko.observableArray(this.convertData());

    return {
        'Data': this.Data
    };
};

var dataMappingOptions = {
    create: function (options) {
        return new DataSource(options);
    }
};

var dataModel = function () {
    this.source = ko.mapping.fromJS({ 'Data': [], 'Percentage': 0 });
};

currentViewModel = new dataModel();
ko.applyBindings(currentViewModel);

他のすべてが機能するため、これの複雑さの多くを取り除きました。基本的に、私は Knockout.Mappings を使用して AJAX 応答をこれらのオブジェクトにマップし、計算フィールド用の関数を追加しています。これは、私が行うことすべてを無視しているように見える HTML です。表示されますが、何もバインドされません。

<table>
    <thead>
        <tr>
            <th>Average</th>
            <th>Frequency</th>
        </tr>
    </thead>
    <tbody data-bind="foreach: kjhkjh">
        <tr>
            <td data-bind="text: $data.Average()"></td>
            <td data-bind="value: $data.Average"></td>
            <td data-bind="text: $data.Average"></td>
            <td data-bind="value: $data.Average()"></td>
            <td>Test</td>
        </tr>
    </tbody>
</table>

オブジェクトがバインドされていないためkjhkjh、エラーがスローされると思いますが、そうではありません。入れてsource.Dataも何もしません。静的テーブルのみを表示し、何もバインドしません。

更新: Javascript で何かから値を取得するには、次のようなものを使用する必要があります。

console.log(currentViewModel.source.Data()[11].Average());
4

2 に答える 2

1

この部分は正しくないようです。同じステートメントに 2 つの返品があります。return前に削除してみてください$.map(

var convertData = function (array) {
    return $.map(data.Data, function (option) {
        return new History;
    });
};

また、オブジェクトthisのプライベート メソッドを参照している可能性もあります。ここから削除:convertData()DataSourcethis

ko.observableArray(this.convertData());
于 2013-01-09T16:44:53.347 に答える
0

私が抱えていたエラーは、Knockout モデルをページに配置したことが原因でした。以下のJSファイルを参照するスクリプトタグを移動すると、テーブルが正しく機能しました。そのため、この抜粋を除いてすべてのページが機能しました。これは、ページの複数の部分とそれを参照するために必要ないくつかの JS ファイルとしてグローバル変数として持っているためです。

そうは言っても、Stockedout は私がコードを改善できたいくつかの方法を指摘しました。

于 2013-01-15T19:43:12.057 に答える