1

Knockout.JS でネストされたバインドに問題があります

たとえば、app.js ファイルに次のようなものがあるとします。

var UserModel = function() {
    this.writeups = ko.observableArray([]);
}

var WriteupModel = function() {
    this.type = 'some type';
}

var MyViewModel = function() {
    this.newUser = new UserModel();
    this.selectedUser = ko.observable(this.newUser);

    this.selectedUser().writeups().push(new WriteupModel());
}

ko.applyBindings(new MyViewModel());

ビューの場合は次のとおりです。

<div id="empReportView" data-bind="template: { name: 'empTmpl', data: selectedUser }"></div>

<script type="text/html" id="empTmpl">
    <table>
        <tbody data-bind="template: { name: 'empWuItem', foreach: $data.writeups } ">
        </tbody>
    </table>
</script>

<script type="text/html" id="empWuItem">
    <tr>
        <td data-bind="text: type"></td>
    </tr>
</script>

selectedUser に属する writeups 配列に別の WriteupModel がプッシュされるたびに、テーブルは更新されません。これは私が達成しようとしているものの単純化されたバージョンですが、記事を作成するときに、新しい情報に基づいて記事テーブルを更新する必要があると想定されます。

私はノックアウトが初めてなので、助けていただければ幸いです!

ありがとう。

-=-= 編集 1 =-=-

注意すべきことの 1 つは、selectedUser のバインディングをリロードすると、追加された書き込みの empWuItem テンプレートが吐き出されることです。ビューモデルでselectedUserプロパティを「再割り当て」する必要なく、UserModelのwriteupsオブザーバブル配列にWriteUpが追加されたときにバインディングがトリガーされるため、これは非効率的です。

4

1 に答える 1

2

プッシュはオブザーバブル配列のプロパティです:

this.selectedUser().writeups().push(new WriteupModel())

する必要があります

this.selectedUser().writeups.push(new WriteupModel());
于 2012-06-27T18:57:40.333 に答える