0

更新: 問題を再現するためにフィドルを作成しようとしています: http://jsfiddle.net/gY2JV/29/ END UPDATE

タイプ DocModel のサーバーからのオブジェクトがあります。そのヒエラルキーはこんな感じ。

Class DocModel:
    Property Rows As List(Of DocRowModel)

Class DocRowModel:
    Property Documents As List(Of Doc)

Class Doc:
    Contains some scalar properties

次のビューモデルで使用します。

HpDocs.DocsVM = function (data) {
    ko.mapping.fromJS(data, {}, this);
};

HpDocs.DocsVM.prototype = {
    getDocs: function (filter) {
        var self = this;
        $.ajax({
            url: getMethodUrl("GetDocs"),  // server call returns object of type DocModel
            data: "{'filter': " + filter + "}",
            success: function (response) {
                ko.mapping.fromJS(response.d, {}, self.MyDocs); // out of stack space

            }
        })
    }
};

HpDocs.dbGetDocs = function (filter) {
    $.ajax({
        url: getMethodUrl("DbGetDocs"), // server call returns object of type DocModel
        data: "{'filter': " + filter + "}",
        success: function (response) {

            myDocsViewModel = new HpDocs.DocsVM({
                MyDocs: ko.mapping.fromJS(response.d)
            });

            var bindingScope = $("#divMyDocs")[0];
            ko.applyBindings(myDocsViewModel, bindingScope);

            HpDocs.hideProgress();
        }
    })
};

そして、これが私のビューです(td内のものはおそらく問題とは無関係です-ドキュメント内の各ドキュメントに一連のスカラープロパティをマッピングしているだけです):

 <table id="tblMyDocs">
                <tbody data-bind="foreach:  MyDocs.Rows">
                    <tr data-bind="foreach: Documents">
                        <td style='text-align: center;'>
                            <div data-bind="attr:  {title: Tooltip}" class='DocumentObject' runat="server" width="40px">
                                <a data-bind="attr: {href: FullServerPath}">
                                    <img data-bind="attr: {src: IconPath, alt: Tooltip}" />
                                </a>
                                <br />
                                <textarea runat="server" readonly="readonly"
                                        data-bind="html: DisplayName" 
                                        class="doclabel" rows="2" cols="10" wrap="hard"
                                </textarea>
                            </div>
                        </td>
                    </tr>
                </tbody>
            </table>

ノックアウトがビューモデルを更新しようとする前にブレークすると、response.d が正しいデータを正しい形式で返していることがわかりますが、スタック領域が不足しています。どうしたの。

4

1 に答える 1

1

問題は解決しました - やり方が間違っていました。問題の内容を確認するには、次を参照してください。

jsfiddleのノックアウトJSマッピングテンプレートのネストされた配列

于 2012-04-20T15:59:04.273 に答える