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您目前唯一不能做的就是使用$位置运算符

一旦您更新您的集合,相应的模板数据就会使用反应性进行更新。我会小心一点,并在您的用例中使用{{#isolate}}&{{#constant}}以确保在不重绘整个模板的情况下呈现 HTML 周围的数据。请参阅反应性隔离恒定区域

于 2013-03-29T14:06:09.713 回答