0

私は流星のアプリケーションを持っています。シンプルなデータモデルと編集画面があります。モデルは次のとおりです。

{
   _id: "some_id",
   date: "date",
   attempts: [{k1: "v1"}, {k1: "v2"}, {k1: "v1"}]
}

このモデルはセッションに保存されます。編集画面は次のように構成されています。

<template name="editModel">
    <form>
        {{#each model.attempts}}
            {{> attempt}}
            <hr/>
        {{/each}}
    </form>
    <button class="btn add-rep">Add</button>
    <hr/>
    <button type="submit" class="btn btn-primary submit-exercise">Submit</button>
</template>

<template name="attempt">
    <label>K1</label>
    <select name="k1">
        <option {{selected k1 "1"}} >1</option>
        <option {{selected k1 "2"}} >2</option>
    </select>
</template>

attemptテンプレートは基本的に単なるドロップダウンであり、オブジェクトのプロパティを更新する必要がk1あります。私は次のコードを書きました:

function keyChanged (e, t){
    t.data.k1 = t.find("[name='k1']").value;
}

Template.attempt.events = {
    "change select[name='grip']"    : keyChanged
}

dataただし、読み取り専用であるため、機能しません。attempts問題は、配列内のオブジェクトを更新するにはどうすればよいかということです。

4

1 に答える 1

1

コレクションの詳細を十分に説明していませんが、コレクションを直接更新してモデルのデータを変更するか、モデル エンジンとして使用しているものを使用してそれを実行します。

たとえば、コレクションを直接更新するには (その配列に何かを追加します):

Collection.update(id_of_record,{attempts : { $addToSet: {k1:"v9"} } });

したがって、これにより新しいレコードがセットに追加されます。可能性のあるすべての操作を確認してください。配列に関する mongodb ドキュメントを参照して$addToSetください。現時点で唯一できないことは、$位置演算子を使用することです。

コレクションを更新するとすぐに、対応するテンプレート データがリアクティブを使用して更新されます。テンプレート全体を再描画せずにHTML周辺のデータがレンダリングされるように、ユースケースで{{#isolate}}&を使用することに少し注意してください。反応性分離定常領域{{#constant}}を参照してください

于 2013-03-29T14:06:09.713 に答える