我有一个流星应用程序。它有一个简单的数据模型和编辑屏幕。该模型如下:
{
_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
数组中更新该对象?
答案 0 :(得分:1)
您还没有详细了解您的收藏品,但您可以直接更新收藏品以更改模型的数据,或使用您用作模型引擎的数据做到这一点。
例如,直接更新您的收藏(向该数组添加内容):
Collection.update(id_of_record,{attempts : { $addToSet: {k1:"v9"} } });
所以这会在集合中添加新记录。看一下all the operations possible,使用$addToSet
等阵列上的mongodb文档,目前唯一可以做的就是使用$
位置运算符
只要您更新集合,相应的模板数据就会使用反应性进行更新。我会有点小心并使用{{#isolate}}
&amp; {{#constant}}
与您的用例一起确保呈现HTML周围的数据而不重写整个模板。见Reactivity Isolation&amp; Constant Regions